From: Yu Watanabe Date: Mon, 16 Dec 2019 09:40:36 +0000 (+0900) Subject: sd-netlink: make netlink_container_parse() takes size_t for rt_len X-Git-Tag: v245-rc1~248^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f501c2515125e4251058ff68d98618f07e85544f;p=thirdparty%2Fsystemd.git sd-netlink: make netlink_container_parse() takes size_t for rt_len And use another unsigned short variable for RTA_OK() macro. --- diff --git a/src/libsystemd/sd-netlink/netlink-message.c b/src/libsystemd/sd-netlink/netlink-message.c index 3679819f2d0..fc578cf5362 100644 --- a/src/libsystemd/sd-netlink/netlink-message.c +++ b/src/libsystemd/sd-netlink/netlink-message.c @@ -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);