]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-netlink: make netlink_container_parse() takes size_t for rt_len
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 16 Dec 2019 09:40:36 +0000 (18:40 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 17 Dec 2019 08:35:25 +0000 (17:35 +0900)
And use another unsigned short variable for RTA_OK() macro.

src/libsystemd/sd-netlink/netlink-message.c

index 3679819f2d0741218bb38fcd37cf41636ca9609d..fc578cf5362a956d5880ab18d47a117aeccd18d3 100644 (file)
@@ -864,7 +864,7 @@ int sd_netlink_message_read_strv(sd_netlink_message *m, unsigned short container
         const NLType *nl_type;
         struct rtattr *rta;
         void *container;
-        unsigned short rt_len;
+        size_t rt_len;
         int r;
 
         assert_return(m, -EINVAL);
@@ -896,10 +896,14 @@ int sd_netlink_message_read_strv(sd_netlink_message *m, unsigned short container
         if (r < 0)
                 return r;
 
-        rt_len = (unsigned short) r;
+        rt_len = (size_t) r;
         rta = container;
 
-        for (; RTA_OK(rta, rt_len); rta = RTA_NEXT(rta, rt_len)) {
+        /* RTA_OK() macro compares with rta->rt_len, which is unsigned short, and
+         * LGTM.com analysis does not like the type difference. Hence, here we
+         * introduce an unsigned short variable as a workaround. */
+        unsigned short len = rt_len;
+        for (; RTA_OK(rta, len); rta = RTA_NEXT(rta, len)) {
                 unsigned short type;
 
                 type = RTA_TYPE(rta);
@@ -918,11 +922,15 @@ int sd_netlink_message_read_strv(sd_netlink_message *m, unsigned short container
 static int netlink_container_parse(sd_netlink_message *m,
                                    struct netlink_container *container,
                                    struct rtattr *rta,
-                                   unsigned rt_len) {
+                                   size_t rt_len) {
         _cleanup_free_ struct netlink_attribute *attributes = NULL;
         size_t n_allocated = 0;
 
-        for (; RTA_OK(rta, rt_len); rta = RTA_NEXT(rta, rt_len)) {
+        /* RTA_OK() macro compares with rta->rt_len, which is unsigned short, and
+         * LGTM.com analysis does not like the type difference. Hence, here we
+         * introduce an unsigned short variable as a workaround. */
+        unsigned short len = rt_len;
+        for (; RTA_OK(rta, len); rta = RTA_NEXT(rta, len)) {
                 unsigned short type;
 
                 type = RTA_TYPE(rta);