| From foo@baz Sun 09 Jun 2019 09:24:16 AM CEST |
| From: Hangbin Liu <liuhangbin@gmail.com> |
| Date: Wed, 5 Jun 2019 12:27:14 +0800 |
| Subject: Revert "fib_rules: return 0 directly if an exactly same rule exists when NLM_F_EXCL not supplied" |
| |
| From: Hangbin Liu <liuhangbin@gmail.com> |
| |
| [ Upstream commit 4970b42d5c362bf873982db7d93245c5281e58f4 ] |
| |
| This reverts commit e9919a24d3022f72bcadc407e73a6ef17093a849. |
| |
| Nathan reported the new behaviour breaks Android, as Android just add |
| new rules and delete old ones. |
| |
| If we return 0 without adding dup rules, Android will remove the new |
| added rules and causing system to soft-reboot. |
| |
| Fixes: e9919a24d302 ("fib_rules: return 0 directly if an exactly same rule exists when NLM_F_EXCL not supplied") |
| Reported-by: Nathan Chancellor <natechancellor@gmail.com> |
| Reported-by: Yaro Slav <yaro330@gmail.com> |
| Reported-by: Maciej Żenczykowski <zenczykowski@gmail.com> |
| Signed-off-by: Hangbin Liu <liuhangbin@gmail.com> |
| Reviewed-by: Nathan Chancellor <natechancellor@gmail.com> |
| Tested-by: Nathan Chancellor <natechancellor@gmail.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/core/fib_rules.c | 6 +++--- |
| 1 file changed, 3 insertions(+), 3 deletions(-) |
| |
| --- a/net/core/fib_rules.c |
| +++ b/net/core/fib_rules.c |
| @@ -756,9 +756,9 @@ int fib_nl_newrule(struct sk_buff *skb, |
| if (err) |
| goto errout; |
| |
| - if (rule_exists(ops, frh, tb, rule)) { |
| - if (nlh->nlmsg_flags & NLM_F_EXCL) |
| - err = -EEXIST; |
| + if ((nlh->nlmsg_flags & NLM_F_EXCL) && |
| + rule_exists(ops, frh, tb, rule)) { |
| + err = -EEXIST; |
| goto errout_free; |
| } |
| |