From: Yu Watanabe Date: Wed, 1 Nov 2023 09:47:36 +0000 (+0900) Subject: sd-netlink: res_id is 16bit but serial is 32bit X-Git-Tag: v255-rc1~66 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4314abf6d4e612e33c53909339931f2bd4cc0c29;p=thirdparty%2Fsystemd.git sd-netlink: res_id is 16bit but serial is 32bit The explicit value here is not so important. Let's chop off the higher bits. Fixes the issue reported at https://github.com/systemd/systemd/pull/29802#issuecomment-1788637950. --- diff --git a/src/libsystemd/sd-netlink/netlink-message-nfnl.c b/src/libsystemd/sd-netlink/netlink-message-nfnl.c index ff7f7c3480a..fd3055d879f 100644 --- a/src/libsystemd/sd-netlink/netlink-message-nfnl.c +++ b/src/libsystemd/sd-netlink/netlink-message-nfnl.c @@ -149,9 +149,9 @@ int sd_nfnl_send_batch( if (serials) serials[i] = message_get_serial(messages[i]); - /* It seems that the kernel accepts an arbitrary number. Let's set the serial of the - * first message. */ - nfnl_message_set_res_id(messages[i], message_get_serial(batch_begin)); + /* It seems that the kernel accepts an arbitrary number. Let's set the lower 16 bits of the + * serial of the first message. */ + nfnl_message_set_res_id(messages[i], (uint16_t) (message_get_serial(batch_begin) & UINT16_MAX)); iovs[c++] = IOVEC_MAKE(messages[i]->hdr, messages[i]->hdr->nlmsg_len); }