]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network/netdev: move calls of netdev_attach() and netdev_request_to_create() to netde...
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 27 Oct 2024 07:37:17 +0000 (16:37 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 30 Oct 2024 20:30:40 +0000 (05:30 +0900)
No functional change, preparation for later commits.

src/network/fuzz-netdev-parser.c
src/network/netdev/netdev.c
src/network/netdev/netdev.h

index f0988bd4cc5cd685d366fbe82ae5b0bd1725762d..7e29ba9b8e8dd3fee665d5050faf7f1abdc42653 100644 (file)
@@ -10,6 +10,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
         _cleanup_(manager_freep) Manager *manager = NULL;
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_(unlink_tempfilep) char netdev_config[] = "/tmp/fuzz-networkd.XXXXXX";
+        _cleanup_(netdev_unrefp) NetDev *netdev = NULL;
 
         if (outside_size_range(size, 0, 65536))
                 return 0;
@@ -22,6 +23,6 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
 
         fflush(f);
         assert_se(manager_new(&manager, /* test_mode = */ true) >= 0);
-        (void) netdev_load_one(manager, netdev_config);
+        (void) netdev_load_one(manager, netdev_config, &netdev);
         return 0;
 }
index 80538a60ec8f45f1fd3acffbd14236c84c357cb3..0cfe6ebb9ee9bd73751263a30da988d8660251ac 100644 (file)
@@ -940,21 +940,20 @@ static int netdev_request_to_create(NetDev *netdev) {
         return 0;
 }
 
-int netdev_load_one(Manager *manager, const char *filename) {
+int netdev_load_one(Manager *manager, const char *filename, NetDev **ret) {
         _cleanup_(netdev_unrefp) NetDev *netdev_raw = NULL, *netdev = NULL;
         const char *dropin_dirname;
         int r;
 
         assert(manager);
         assert(filename);
+        assert(ret);
 
         r = null_or_empty_path(filename);
         if (r < 0)
                 return log_warning_errno(r, "Failed to check if \"%s\" is empty: %m", filename);
-        if (r > 0) {
-                log_debug("Skipping empty file: %s", filename);
-                return 0;
-        }
+        if (r > 0)
+                return log_debug_errno(SYNTHETIC_ERRNO(ENOENT), "Skipping empty file: %s", filename);
 
         netdev_raw = new(NetDev, 1);
         if (!netdev_raw)
@@ -979,10 +978,8 @@ int netdev_load_one(Manager *manager, const char *filename) {
                 return r; /* config_parse_many() logs internally. */
 
         /* skip out early if configuration does not match the environment */
-        if (!condition_test_list(netdev_raw->conditions, environ, NULL, NULL, NULL)) {
-                log_debug("%s: Conditions in the file do not match the system environment, skipping.", filename);
-                return 0;
-        }
+        if (!condition_test_list(netdev_raw->conditions, environ, NULL, NULL, NULL))
+                return log_debug_errno(SYNTHETIC_ERRNO(ESTALE), "%s: Conditions in the file do not match the system environment, skipping.", filename);
 
         if (netdev_raw->kind == _NETDEV_KIND_INVALID)
                 return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "NetDev has no Kind= configured in \"%s\", ignoring.", filename);
@@ -1025,17 +1022,9 @@ int netdev_load_one(Manager *manager, const char *filename) {
         if (!netdev->filename)
                 return log_oom();
 
-        r = netdev_attach(netdev);
-        if (r < 0)
-                return r;
-
         log_syntax(/* unit = */ NULL, LOG_DEBUG, filename, /* config_line = */ 0, /* error = */ 0, "Successfully loaded.");
 
-        r = netdev_request_to_create(netdev);
-        if (r < 0)
-                return r; /* netdev_request_to_create() logs internally. */
-
-        TAKE_PTR(netdev);
+        *ret = TAKE_PTR(netdev);
         return 0;
 }
 
@@ -1049,8 +1038,20 @@ int netdev_load(Manager *manager) {
         if (r < 0)
                 return log_error_errno(r, "Failed to enumerate netdev files: %m");
 
-        STRV_FOREACH(f, files)
-                (void) netdev_load_one(manager, *f);
+        STRV_FOREACH(f, files) {
+                _cleanup_(netdev_unrefp) NetDev *netdev = NULL;
+
+                if (netdev_load_one(manager, *f, &netdev) < 0)
+                        continue;
+
+                if (netdev_attach(netdev) < 0)
+                        continue;
+
+                if (netdev_request_to_create(netdev) < 0)
+                        continue;
+
+                TAKE_PTR(netdev);
+        }
 
         return 0;
 }
index 786fe9e9f6ff8b07d646a1204399ff3ea133f3f3..a91ef5065448eb46a2eff5e85db53d73b76aeff7 100644 (file)
@@ -218,7 +218,7 @@ void netdev_detach(NetDev *netdev);
 int netdev_set_ifindex_internal(NetDev *netdev, int ifindex);
 
 int netdev_load(Manager *manager);
-int netdev_load_one(Manager *manager, const char *filename);
+int netdev_load_one(Manager *manager, const char *filename, NetDev **ret);
 void netdev_drop(NetDev *netdev);
 void netdev_enter_failed(NetDev *netdev);
 int netdev_enter_ready(NetDev *netdev);