On Mon, May 20, 2019 at 11:04:29AM +0200, Greg Kroah-Hartman wrote: > On Sun, May 19, 2019 at 06:29:19PM -0600, David Ahern wrote: > > On 5/19/19 9:43 AM, Nathan Chancellor wrote: > > > Hi all, > > > > > > This commit is causing issues on Android devices when Wi-Fi and mobile > > > data are both enabled. The device will do a soft reboot consistently. > > > So far, I've had reports on the Pixel 3 XL, OnePlus 6, Pocophone, and > > > Note 9 and I can reproduce on my OnePlus 6. > > > > > > Sorry for taking so long to report this, I just figured out how to > > > reproduce it today and I didn't want to report it without that. > > > > > > Attached is a full dmesg and the relevant snippet from Android's logcat. > > > > > > Let me know what I can do to help debug, > > > Nathan > > > > > > > It's a backport problem. err needs to be reset to 0 before the goto. > > Ah, I see it, let me go queue up a fix for this. Here's the fix I'm queueing up now: >From b42f0ebbe4431ff7ce99c916555418f4a4c2be67 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> Date: Mon, 20 May 2019 11:07:29 +0200 Subject: [PATCH] fib_rules: fix error in backport of e9919a24d302 ("fib_rules: return 0...") When commit e9919a24d302 ("fib_rules: return 0 directly if an exactly same rule exists when NLM_F_EXCL not supplied") was backported to 4.9.y, it changed the logic a bit as err should have been reset before exiting the test, like it happens in the original logic. If this is not set, errors happen :( Reported-by: Nathan Chancellor <natechancellor@xxxxxxxxx> Reported-by: David Ahern <dsahern@xxxxxxxxx> Reported-by: Florian Westphal <fw@xxxxxxxxx> Cc: Hangbin Liu <liuhangbin@xxxxxxxxx> Cc: David S. Miller <davem@xxxxxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- net/core/fib_rules.c | 1 + 1 file changed, 1 insertion(+) diff --git a/net/core/fib_rules.c b/net/core/fib_rules.c index bb26457e8c21..c03dd2104d33 100644 --- a/net/core/fib_rules.c +++ b/net/core/fib_rules.c @@ -430,6 +430,7 @@ int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr *nlh) goto errout_free; if (rule_exists(ops, frh, tb, rule)) { + err = 0; if (nlh->nlmsg_flags & NLM_F_EXCL) err = -EEXIST; goto errout_free; -- 2.21.0