aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorChengen Du <chengen.du@canonical.com>2025-01-14 12:12:34 +0800
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2025-01-29 14:58:31 -0500
commit07e0d99a2f701123ad3104c0f1a1e66bce74d6e5 (patch)
treecdc89427b9b22837828adb61551a4529b8c651af
parentfirmware: iscsi_ibft: fix ISCSI_IBFT Kconfig entry (diff)
downloadwireguard-linux-07e0d99a2f701123ad3104c0f1a1e66bce74d6e5.tar.xz
wireguard-linux-07e0d99a2f701123ad3104c0f1a1e66bce74d6e5.zip
iscsi_ibft: Fix UBSAN shift-out-of-bounds warning in ibft_attr_show_nic()
When performing an iSCSI boot using IPv6, iscsistart still reads the /sys/firmware/ibft/ethernetX/subnet-mask entry. Since the IPv6 prefix length is 64, this causes the shift exponent to become negative, triggering a UBSAN warning. As the concept of a subnet mask does not apply to IPv6, the value is set to ~0 to suppress the warning message. Signed-off-by: Chengen Du <chengen.du@canonical.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
-rw-r--r--drivers/firmware/iscsi_ibft.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/firmware/iscsi_ibft.c b/drivers/firmware/iscsi_ibft.c
index 6e9788324fea..371f24569b3b 100644
--- a/drivers/firmware/iscsi_ibft.c
+++ b/drivers/firmware/iscsi_ibft.c
@@ -310,7 +310,10 @@ static ssize_t ibft_attr_show_nic(void *data, int type, char *buf)
str += sprintf_ipaddr(str, nic->ip_addr);
break;
case ISCSI_BOOT_ETH_SUBNET_MASK:
- val = cpu_to_be32(~((1 << (32-nic->subnet_mask_prefix))-1));
+ if (nic->subnet_mask_prefix > 32)
+ val = cpu_to_be32(~0);
+ else
+ val = cpu_to_be32(~((1 << (32-nic->subnet_mask_prefix))-1));
str += sprintf(str, "%pI4", &val);
break;
case ISCSI_BOOT_ETH_PREFIX_LEN: