net: Fix fib notifer to return errno
authorDavid Ahern <dsa@cumulusnetworks.com>
Wed, 28 Mar 2018 01:21:55 +0000 (18:21 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 29 Mar 2018 18:10:30 +0000 (14:10 -0400)
Notifier handlers use notifier_from_errno to convert any potential error
to an encoded format. As a consequence the other side, call_fib_notifier{s}
in this case, needs to use notifier_to_errno to return the error from
the handler back to its caller.

Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
Reviewed-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/fib_notifier.c

index 614b985c92a4ed2cd9eaddccdbd265d173a1a3c6..13a40b831d6df2ac899f1e1f6940e612de57bee3 100644 (file)
@@ -13,16 +13,22 @@ int call_fib_notifier(struct notifier_block *nb, struct net *net,
                      enum fib_event_type event_type,
                      struct fib_notifier_info *info)
 {
+       int err;
+
        info->net = net;
-       return nb->notifier_call(nb, event_type, info);
+       err = nb->notifier_call(nb, event_type, info);
+       return notifier_to_errno(err);
 }
 EXPORT_SYMBOL(call_fib_notifier);
 
 int call_fib_notifiers(struct net *net, enum fib_event_type event_type,
                       struct fib_notifier_info *info)
 {
+       int err;
+
        info->net = net;
-       return atomic_notifier_call_chain(&fib_chain, event_type, info);
+       err = atomic_notifier_call_chain(&fib_chain, event_type, info);
+       return notifier_to_errno(err);
 }
 EXPORT_SYMBOL(call_fib_notifiers);