backport drbd main ipv6: Fix interface indices larger than 255
drbd services occasionally fail at rapid successive swact Netlink device number exceeding 255 (max number that can be represented with two characters in hex , "ff") fail to parse by drbdadm during fast successive swacts, the Netlink device number (second string in lines of /proc/net/if_inet6]) gets very large exceeding 255 decimal and cannot be represented as two hex characters (ff), like this: fe80000000000000eceeeefffeeeeeee 14e 40 20 80 cali19a19189318 Closes-bug: 1877907 Change-Id: I035eb81830f3c5e5a129c20766348ff842bc05c8 Signed-off-by: Paul Vaduva <Paul.Vaduva@windriver.com>
This commit is contained in:
parent
5bb777d372
commit
4cad553856
@ -44,6 +44,7 @@ Patch0006: 0006-avoid-kernel-userspace-version-check.patch
|
|||||||
Patch0007: 0007-Update-OCF-to-attempt-connect-in-certain-states.patch
|
Patch0007: 0007-Update-OCF-to-attempt-connect-in-certain-states.patch
|
||||||
Patch0008: 0008-Increase-short-cmd-timeout-to-15-secs.patch
|
Patch0008: 0008-Increase-short-cmd-timeout-to-15-secs.patch
|
||||||
Patch0009: 0009-Check-for-mounted-device-before-demoting-Primary-DRB.patch
|
Patch0009: 0009-Check-for-mounted-device-before-demoting-Primary-DRB.patch
|
||||||
|
Patch0010: 0010-backport-drbd-main-ipv6-Fix-interface-indices-larger.patch
|
||||||
|
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
ExclusiveOS: linux
|
ExclusiveOS: linux
|
||||||
@ -273,6 +274,7 @@ management utility.
|
|||||||
%patch0007 -p1
|
%patch0007 -p1
|
||||||
%patch0008 -p1
|
%patch0008 -p1
|
||||||
%patch0009 -p1
|
%patch0009 -p1
|
||||||
|
%patch0010 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%configure \
|
%configure \
|
||||||
|
@ -0,0 +1,39 @@
|
|||||||
|
From 393137563853cde5561845aeb8498d831d6368aa Mon Sep 17 00:00:00 2001
|
||||||
|
From: paul <paul@starlingx.com>
|
||||||
|
Date: Mon, 29 Jun 2020 16:48:39 +0000
|
||||||
|
Subject: [PATCH] backport: drbd main ipv6: Fix interface indices larger than
|
||||||
|
255
|
||||||
|
|
||||||
|
fscanf line probably copied from kernel printf, but printf specifies the
|
||||||
|
minimal field width and scanf the maximal field width.
|
||||||
|
|
||||||
|
The bug was triggered on Xen servers that create and assign new,
|
||||||
|
incremented interface IDs for new machines.
|
||||||
|
|
||||||
|
ifindex is of type int anyways: struct net_device as defined in
|
||||||
|
include/linux/netdevice.h. We should not rely on the assumption that
|
||||||
|
the values are small enough to fit in one byte.
|
||||||
|
|
||||||
|
Signed-off-by: Roland Kammerer <roland.kammerer@linbit.com>
|
||||||
|
|
||||||
|
Signed-off-by: paul <paul@starlingx.com>
|
||||||
|
---
|
||||||
|
user/drbdadm_main.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/user/drbdadm_main.c b/user/drbdadm_main.c
|
||||||
|
index 19c5a44..d516d6f 100644
|
||||||
|
--- a/user/drbdadm_main.c
|
||||||
|
+++ b/user/drbdadm_main.c
|
||||||
|
@@ -3091,7 +3091,7 @@ int have_ip_ipv6(const char *ip)
|
||||||
|
|
||||||
|
while (fscanf
|
||||||
|
(if_inet6,
|
||||||
|
- X32(08) X32(08) X32(08) X32(08) " %*02x %*02x %*02x %*02x %s",
|
||||||
|
+ X32(08) X32(08) X32(08) X32(08) " %*x %*x %*x %*x %s",
|
||||||
|
b, b + 1, b + 2, b + 3, name) > 0) {
|
||||||
|
for (i = 0; i < 4; i++)
|
||||||
|
addr6.s6_addr32[i] = cpu_to_be32(b[i]);
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
Loading…
Reference in New Issue
Block a user