netlink: invert error code in netlink_set_err()
The callers of netlink_set_err() currently pass a negative value as parameter for the error code. However, sk->sk_err wants a positive error value. Without this patch, skb_recv_datagram() called by netlink_recvmsg() may return a positive value to report an error. Another choice to fix this is to change callers to pass a positive error value, but this seems a bit inconsistent and error prone to me. Indeed, the callers of netlink_set_err() assumed that the (usual) negative value for error codes was fine before this patch :). This patch also includes some documentation in docbook format for netlink_set_err() to avoid this sort of confusion. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
17edde5209
commit
4843b93c96
|
@ -1084,6 +1084,13 @@ out:
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* netlink_set_err - report error to broadcast listeners
|
||||
* @ssk: the kernel netlink socket, as returned by netlink_kernel_create()
|
||||
* @pid: the PID of a process that we want to skip (if any)
|
||||
* @groups: the broadcast group that will notice the error
|
||||
* @code: error code, must be negative (as usual in kernelspace)
|
||||
*/
|
||||
void netlink_set_err(struct sock *ssk, u32 pid, u32 group, int code)
|
||||
{
|
||||
struct netlink_set_err_data info;
|
||||
|
@ -1093,7 +1100,8 @@ void netlink_set_err(struct sock *ssk, u32 pid, u32 group, int code)
|
|||
info.exclude_sk = ssk;
|
||||
info.pid = pid;
|
||||
info.group = group;
|
||||
info.code = code;
|
||||
/* sk->sk_err wants a positive error value */
|
||||
info.code = -code;
|
||||
|
||||
read_lock(&nl_table_lock);
|
||||
|
||||
|
|
Loading…
Reference in a new issue