|
@@ -375,6 +375,7 @@ static void __inet_del_ifa(struct in_device *in_dev, struct in_ifaddr **ifap,
|
|
blocking_notifier_call_chain(&inetaddr_chain, NETDEV_DOWN, ifa1);
|
|
blocking_notifier_call_chain(&inetaddr_chain, NETDEV_DOWN, ifa1);
|
|
|
|
|
|
if (promote) {
|
|
if (promote) {
|
|
|
|
+ struct in_ifaddr *next_sec = promote->ifa_next;
|
|
|
|
|
|
if (prev_prom) {
|
|
if (prev_prom) {
|
|
prev_prom->ifa_next = promote->ifa_next;
|
|
prev_prom->ifa_next = promote->ifa_next;
|
|
@@ -386,7 +387,7 @@ static void __inet_del_ifa(struct in_device *in_dev, struct in_ifaddr **ifap,
|
|
rtmsg_ifa(RTM_NEWADDR, promote, nlh, pid);
|
|
rtmsg_ifa(RTM_NEWADDR, promote, nlh, pid);
|
|
blocking_notifier_call_chain(&inetaddr_chain,
|
|
blocking_notifier_call_chain(&inetaddr_chain,
|
|
NETDEV_UP, promote);
|
|
NETDEV_UP, promote);
|
|
- for (ifa = promote->ifa_next; ifa; ifa = ifa->ifa_next) {
|
|
|
|
|
|
+ for (ifa = next_sec; ifa; ifa = ifa->ifa_next) {
|
|
if (ifa1->ifa_mask != ifa->ifa_mask ||
|
|
if (ifa1->ifa_mask != ifa->ifa_mask ||
|
|
!inet_ifa_match(ifa1->ifa_address, ifa))
|
|
!inet_ifa_match(ifa1->ifa_address, ifa))
|
|
continue;
|
|
continue;
|