From: Yu Watanabe Date: Sun, 29 Aug 2021 23:20:05 +0000 (+0900) Subject: udev: pass rtnl to builtin commands X-Git-Tag: v250-rc1~746^2~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=92232230af6c1b0c76b7586db3c891c0e2860f4f;p=thirdparty%2Fsystemd.git udev: pass rtnl to builtin commands --- diff --git a/src/udev/udev-builtin-blkid.c b/src/udev/udev-builtin-blkid.c index cdb1df7c04d..586f083ffa7 100644 --- a/src/udev/udev-builtin-blkid.c +++ b/src/udev/udev-builtin-blkid.c @@ -233,7 +233,7 @@ static int probe_superblocks(blkid_probe pr) { return blkid_do_safeprobe(pr); } -static int builtin_blkid(sd_device *dev, int argc, char *argv[], bool test) { +static int builtin_blkid(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) { const char *devnode, *root_partition = NULL, *data, *name; _cleanup_(blkid_free_probep) blkid_probe pr = NULL; bool noraid = false, is_gpt = false; diff --git a/src/udev/udev-builtin-btrfs.c b/src/udev/udev-builtin-btrfs.c index 436bf6bd442..a0093cb4234 100644 --- a/src/udev/udev-builtin-btrfs.c +++ b/src/udev/udev-builtin-btrfs.c @@ -12,7 +12,7 @@ #include "udev-builtin.h" #include "util.h" -static int builtin_btrfs(sd_device *dev, int argc, char *argv[], bool test) { +static int builtin_btrfs(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) { struct btrfs_ioctl_vol_args args = {}; _cleanup_close_ int fd = -1; int r; diff --git a/src/udev/udev-builtin-hwdb.c b/src/udev/udev-builtin-hwdb.c index 87535dbd005..1241c08f2c5 100644 --- a/src/udev/udev-builtin-hwdb.c +++ b/src/udev/udev-builtin-hwdb.c @@ -118,7 +118,7 @@ next: return r; } -static int builtin_hwdb(sd_device *dev, int argc, char *argv[], bool test) { +static int builtin_hwdb(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) { static const struct option options[] = { { "filter", required_argument, NULL, 'f' }, { "device", required_argument, NULL, 'd' }, diff --git a/src/udev/udev-builtin-input_id.c b/src/udev/udev-builtin-input_id.c index 08a9e9c65d5..0e719108ed9 100644 --- a/src/udev/udev-builtin-input_id.c +++ b/src/udev/udev-builtin-input_id.c @@ -322,7 +322,7 @@ static bool test_key(sd_device *dev, return found; } -static int builtin_input_id(sd_device *dev, int argc, char *argv[], bool test) { +static int builtin_input_id(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) { sd_device *pdev; unsigned long bitmask_ev[NBITS(EV_MAX)]; unsigned long bitmask_abs[NBITS(ABS_MAX)]; diff --git a/src/udev/udev-builtin-keyboard.c b/src/udev/udev-builtin-keyboard.c index e6beb190660..cc266cc6634 100644 --- a/src/udev/udev-builtin-keyboard.c +++ b/src/udev/udev-builtin-keyboard.c @@ -159,7 +159,7 @@ static int set_trackpoint_sensitivity(sd_device *dev, const char *value) { return 0; } -static int builtin_keyboard(sd_device *dev, int argc, char *argv[], bool test) { +static int builtin_keyboard(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) { unsigned release[1024]; unsigned release_count = 0; _cleanup_close_ int fd = -1; diff --git a/src/udev/udev-builtin-kmod.c b/src/udev/udev-builtin-kmod.c index 0e31002b42e..bc6a11f2410 100644 --- a/src/udev/udev-builtin-kmod.c +++ b/src/udev/udev-builtin-kmod.c @@ -20,7 +20,7 @@ _printf_(6,0) static void udev_kmod_log(void *data, int priority, const char *fi log_internalv(priority, 0, file, line, fn, format, args); } -static int builtin_kmod(sd_device *dev, int argc, char *argv[], bool test) { +static int builtin_kmod(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) { if (!ctx) return 0; diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c index f8a519af464..7b1ffbcfa63 100644 --- a/src/udev/udev-builtin-net_id.c +++ b/src/udev/udev-builtin-net_id.c @@ -863,7 +863,7 @@ static int ieee_oui(sd_device *dev, struct netnames *names, bool test) { return 0; } -static int builtin_net_id(sd_device *dev, int argc, char *argv[], bool test) { +static int builtin_net_id(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) { const char *s, *p, *devtype, *prefix = "en"; struct netnames names = {}; unsigned long i; diff --git a/src/udev/udev-builtin-net_setup_link.c b/src/udev/udev-builtin-net_setup_link.c index 5964e30bf1a..49492349b25 100644 --- a/src/udev/udev-builtin-net_setup_link.c +++ b/src/udev/udev-builtin-net_setup_link.c @@ -10,7 +10,7 @@ static LinkConfigContext *ctx = NULL; -static int builtin_net_setup_link(sd_device *dev, int argc, char **argv, bool test) { +static int builtin_net_setup_link(sd_device *dev, sd_netlink **rtnl, int argc, char **argv, bool test) { _cleanup_free_ char *driver = NULL; const char *name = NULL; LinkConfig *link; diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c index 083ce678036..de1f8dbaa11 100644 --- a/src/udev/udev-builtin-path_id.c +++ b/src/udev/udev-builtin-path_id.c @@ -530,7 +530,7 @@ static sd_device *handle_ap(sd_device *parent, char **path) { return skip_subsystem(parent, "ap"); } -static int builtin_path_id(sd_device *dev, int argc, char *argv[], bool test) { +static int builtin_path_id(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) { sd_device *parent; _cleanup_free_ char *path = NULL; _cleanup_free_ char *compat_path = NULL; diff --git a/src/udev/udev-builtin-uaccess.c b/src/udev/udev-builtin-uaccess.c index 3fdbb88bc4f..6e73d993755 100644 --- a/src/udev/udev-builtin-uaccess.c +++ b/src/udev/udev-builtin-uaccess.c @@ -16,7 +16,7 @@ #include "log.h" #include "udev-builtin.h" -static int builtin_uaccess(sd_device *dev, int argc, char *argv[], bool test) { +static int builtin_uaccess(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) { const char *path = NULL, *seat; bool changed_acl = false; uid_t uid; diff --git a/src/udev/udev-builtin-usb_id.c b/src/udev/udev-builtin-usb_id.c index 746fb40e645..d37469c62b1 100644 --- a/src/udev/udev-builtin-usb_id.c +++ b/src/udev/udev-builtin-usb_id.c @@ -224,7 +224,7 @@ static int dev_if_packed_info(sd_device *dev, char *ifs_str, size_t len) { * 6.) If the device supplies a serial number, this number * is concatenated with the identification with an underscore '_'. */ -static int builtin_usb_id(sd_device *dev, int argc, char *argv[], bool test) { +static int builtin_usb_id(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test) { char vendor_str[64] = ""; char vendor_str_enc[256]; const char *vendor_id; diff --git a/src/udev/udev-builtin.c b/src/udev/udev-builtin.c index 80d17662b20..a9095969bdc 100644 --- a/src/udev/udev-builtin.c +++ b/src/udev/udev-builtin.c @@ -107,7 +107,7 @@ UdevBuiltinCommand udev_builtin_lookup(const char *command) { return _UDEV_BUILTIN_INVALID; } -int udev_builtin_run(sd_device *dev, UdevBuiltinCommand cmd, const char *command, bool test) { +int udev_builtin_run(sd_device *dev, sd_netlink **rtnl, UdevBuiltinCommand cmd, const char *command, bool test) { _cleanup_strv_free_ char **argv = NULL; int r; @@ -124,7 +124,7 @@ int udev_builtin_run(sd_device *dev, UdevBuiltinCommand cmd, const char *command /* we need '0' here to reset the internal state */ optind = 0; - return builtins[cmd]->cmd(dev, strv_length(argv), argv, test); + return builtins[cmd]->cmd(dev, rtnl, strv_length(argv), argv, test); } int udev_builtin_add_property(sd_device *dev, bool test, const char *key, const char *val) { diff --git a/src/udev/udev-builtin.h b/src/udev/udev-builtin.h index 849e5d9e8d9..abfed2c181d 100644 --- a/src/udev/udev-builtin.h +++ b/src/udev/udev-builtin.h @@ -4,6 +4,7 @@ #include #include "sd-device.h" +#include "sd-netlink.h" typedef enum { #if HAVE_BLKID @@ -29,7 +30,7 @@ typedef enum { typedef struct UdevBuiltin { const char *name; - int (*cmd)(sd_device *dev, int argc, char *argv[], bool test); + int (*cmd)(sd_device *dev, sd_netlink **rtnl, int argc, char *argv[], bool test); const char *help; int (*init)(void); void (*exit)(void); @@ -73,7 +74,7 @@ void udev_builtin_exit(void); UdevBuiltinCommand udev_builtin_lookup(const char *command); const char *udev_builtin_name(UdevBuiltinCommand cmd); bool udev_builtin_run_once(UdevBuiltinCommand cmd); -int udev_builtin_run(sd_device *dev, UdevBuiltinCommand cmd, const char *command, bool test); +int udev_builtin_run(sd_device *dev, sd_netlink **rtnl, UdevBuiltinCommand cmd, const char *command, bool test); void udev_builtin_list(void); bool udev_builtin_validate(void); int udev_builtin_add_property(sd_device *dev, bool test, const char *key, const char *val); diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c index 2179c8d254b..3dfdff71128 100644 --- a/src/udev/udev-event.c +++ b/src/udev/udev-event.c @@ -1073,7 +1073,7 @@ void udev_event_execute_run(UdevEvent *event, usec_t timeout_usec, int timeout_s if (builtin_cmd != _UDEV_BUILTIN_INVALID) { log_device_debug(event->dev, "Running built-in command \"%s\"", command); - r = udev_builtin_run(event->dev, builtin_cmd, command, false); + r = udev_builtin_run(event->dev, &event->rtnl, builtin_cmd, command, false); if (r < 0) log_device_debug_errno(event->dev, r, "Failed to run built-in command \"%s\", ignoring: %m", command); } else { diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c index cb7de261d5a..3759ac84007 100644 --- a/src/udev/udev-rules.c +++ b/src/udev/udev-rules.c @@ -1829,7 +1829,7 @@ static int udev_rule_apply_token_to_event( (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false); log_rule_debug(dev, rules, "Importing properties from results of builtin command '%s'", buf); - r = udev_builtin_run(dev, cmd, buf, false); + r = udev_builtin_run(dev, &event->rtnl, cmd, buf, false); if (r < 0) { /* remember failure */ log_rule_debug_errno(dev, rules, r, "Failed to run builtin '%s': %m", buf); diff --git a/src/udev/udevadm-test-builtin.c b/src/udev/udevadm-test-builtin.c index cae2950c8f5..c266e16849b 100644 --- a/src/udev/udevadm-test-builtin.c +++ b/src/udev/udevadm-test-builtin.c @@ -72,6 +72,7 @@ static int parse_argv(int argc, char *argv[]) { } int builtin_main(int argc, char *argv[], void *userdata) { + _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL; _cleanup_(sd_device_unrefp) sd_device *dev = NULL; UdevBuiltinCommand cmd; int r; @@ -97,7 +98,7 @@ int builtin_main(int argc, char *argv[], void *userdata) { goto finish; } - r = udev_builtin_run(dev, cmd, arg_command, true); + r = udev_builtin_run(dev, &rtnl, cmd, arg_command, true); if (r < 0) log_debug_errno(r, "Builtin command '%s' fails: %m", arg_command);