mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 19:51:31 -04:00
BACKPORT: net: simplify cBPF setsockopt compat handling
Add a helper that copies either a native or compat bpf_fprog from userspace after verifying the length, and remove the compat setsockopt handlers that now aren't required. Change-Id: Ie62fb625ef94ad6d2148531c279e87e82524aae0 Signed-off-by: Christoph Hellwig <[email protected]> Signed-off-by: David S. Miller <[email protected]>
This commit is contained in:
parent
7425cadc33
commit
a13a4c9122
6 changed files with 40 additions and 96 deletions
|
|
@ -1598,10 +1598,10 @@ static int fanout_set_data_cbpf(struct packet_sock *po, char __user *data,
|
|||
|
||||
if (sock_flag(&po->sk, SOCK_FILTER_LOCKED))
|
||||
return -EPERM;
|
||||
if (len != sizeof(fprog))
|
||||
return -EINVAL;
|
||||
if (copy_from_user(&fprog, data, len))
|
||||
return -EFAULT;
|
||||
|
||||
ret = copy_bpf_fprog_from_user(&fprog, data, len);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = bpf_prog_create_from_user(&new, &fprog, NULL, false);
|
||||
if (ret)
|
||||
|
|
@ -4147,28 +4147,6 @@ static int packet_getsockopt(struct socket *sock, int level, int optname,
|
|||
return 0;
|
||||
}
|
||||
|
||||
|
||||
#ifdef CONFIG_COMPAT
|
||||
static int compat_packet_setsockopt(struct socket *sock, int level, int optname,
|
||||
char __user *optval, unsigned int optlen)
|
||||
{
|
||||
struct packet_sock *po = pkt_sk(sock->sk);
|
||||
|
||||
if (level != SOL_PACKET)
|
||||
return -ENOPROTOOPT;
|
||||
|
||||
if (optname == PACKET_FANOUT_DATA &&
|
||||
po->fanout && po->fanout->type == PACKET_FANOUT_CBPF) {
|
||||
optval = (char __user *)get_compat_bpf_fprog(optval);
|
||||
if (!optval)
|
||||
return -EFAULT;
|
||||
optlen = sizeof(struct sock_fprog);
|
||||
}
|
||||
|
||||
return packet_setsockopt(sock, level, optname, optval, optlen);
|
||||
}
|
||||
#endif
|
||||
|
||||
static int packet_notifier(struct notifier_block *this,
|
||||
unsigned long msg, void *ptr)
|
||||
{
|
||||
|
|
@ -4657,9 +4635,6 @@ static const struct proto_ops packet_ops = {
|
|||
.shutdown = sock_no_shutdown,
|
||||
.setsockopt = packet_setsockopt,
|
||||
.getsockopt = packet_getsockopt,
|
||||
#ifdef CONFIG_COMPAT
|
||||
.compat_setsockopt = compat_packet_setsockopt,
|
||||
#endif
|
||||
.sendmsg = packet_sendmsg,
|
||||
.recvmsg = packet_recvmsg,
|
||||
.mmap = packet_mmap,
|
||||
|
|
|
|||
Loading…
Reference in a new issue