bpf: Propagate modified uaddrlen from cgroup sockaddr programs
[platform/kernel/linux-rpi.git] / net / ipv4 / udp.c
index 9cb22a6..7be4ddc 100644 (file)
@@ -1143,7 +1143,9 @@ int udp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
 
        if (cgroup_bpf_enabled(CGROUP_UDP4_SENDMSG) && !connected) {
                err = BPF_CGROUP_RUN_PROG_UDP4_SENDMSG_LOCK(sk,
-                                           (struct sockaddr *)usin, &ipc.addr);
+                                           (struct sockaddr *)usin,
+                                           &msg->msg_namelen,
+                                           &ipc.addr);
                if (err)
                        goto out_free;
                if (usin) {
@@ -1865,7 +1867,8 @@ try_again:
                *addr_len = sizeof(*sin);
 
                BPF_CGROUP_RUN_PROG_UDP4_RECVMSG_LOCK(sk,
-                                                     (struct sockaddr *)sin);
+                                                     (struct sockaddr *)sin,
+                                                     addr_len);
        }
 
        if (udp_test_bit(GRO_ENABLED, sk))
@@ -1904,7 +1907,7 @@ int udp_pre_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
        if (addr_len < sizeof(struct sockaddr_in))
                return -EINVAL;
 
-       return BPF_CGROUP_RUN_PROG_INET4_CONNECT_LOCK(sk, uaddr);
+       return BPF_CGROUP_RUN_PROG_INET4_CONNECT_LOCK(sk, uaddr, &addr_len);
 }
 EXPORT_SYMBOL(udp_pre_connect);