Skip to content

Commit fefba7d

Browse files
daandemeyerMartin KaFai Lau
authored andcommitted
bpf: Propagate modified uaddrlen from cgroup sockaddr programs
As prep for adding unix socket support to the cgroup sockaddr hooks, let's propagate the sockaddr length back to the caller after running a bpf cgroup sockaddr hook program. While not important for AF_INET or AF_INET6, the sockaddr length is important when working with AF_UNIX sockaddrs as the size of the sockaddr cannot be determined just from the address family or the sockaddr's contents. __cgroup_bpf_run_filter_sock_addr() is modified to take the uaddrlen as an input/output argument. After running the program, the modified sockaddr length is stored in the uaddrlen pointer. Signed-off-by: Daan De Meyer <daan.j.demeyer@gmail.com> Link: https://lore.kernel.org/r/20231011185113.140426-3-daan.j.demeyer@gmail.com Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
1 parent feba7b6 commit fefba7d

11 files changed

Lines changed: 76 additions & 54 deletions

File tree

include/linux/bpf-cgroup.h

Lines changed: 37 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ int __cgroup_bpf_run_filter_sk(struct sock *sk,
120120

121121
int __cgroup_bpf_run_filter_sock_addr(struct sock *sk,
122122
struct sockaddr *uaddr,
123+
int *uaddrlen,
123124
enum cgroup_bpf_attach_type atype,
124125
void *t_ctx,
125126
u32 *flags);
@@ -230,22 +231,22 @@ static inline bool cgroup_bpf_sock_enabled(struct sock *sk,
230231
#define BPF_CGROUP_RUN_PROG_INET6_POST_BIND(sk) \
231232
BPF_CGROUP_RUN_SK_PROG(sk, CGROUP_INET6_POST_BIND)
232233

233-
#define BPF_CGROUP_RUN_SA_PROG(sk, uaddr, atype) \
234+
#define BPF_CGROUP_RUN_SA_PROG(sk, uaddr, uaddrlen, atype) \
234235
({ \
235236
int __ret = 0; \
236237
if (cgroup_bpf_enabled(atype)) \
237-
__ret = __cgroup_bpf_run_filter_sock_addr(sk, uaddr, atype, \
238-
NULL, NULL); \
238+
__ret = __cgroup_bpf_run_filter_sock_addr(sk, uaddr, uaddrlen, \
239+
atype, NULL, NULL); \
239240
__ret; \
240241
})
241242

242-
#define BPF_CGROUP_RUN_SA_PROG_LOCK(sk, uaddr, atype, t_ctx) \
243+
#define BPF_CGROUP_RUN_SA_PROG_LOCK(sk, uaddr, uaddrlen, atype, t_ctx) \
243244
({ \
244245
int __ret = 0; \
245246
if (cgroup_bpf_enabled(atype)) { \
246247
lock_sock(sk); \
247-
__ret = __cgroup_bpf_run_filter_sock_addr(sk, uaddr, atype, \
248-
t_ctx, NULL); \
248+
__ret = __cgroup_bpf_run_filter_sock_addr(sk, uaddr, uaddrlen, \
249+
atype, t_ctx, NULL); \
249250
release_sock(sk); \
250251
} \
251252
__ret; \
@@ -256,14 +257,14 @@ static inline bool cgroup_bpf_sock_enabled(struct sock *sk,
256257
* (at bit position 0) is to indicate CAP_NET_BIND_SERVICE capability check
257258
* should be bypassed (BPF_RET_BIND_NO_CAP_NET_BIND_SERVICE).
258259
*/
259-
#define BPF_CGROUP_RUN_PROG_INET_BIND_LOCK(sk, uaddr, atype, bind_flags) \
260+
#define BPF_CGROUP_RUN_PROG_INET_BIND_LOCK(sk, uaddr, uaddrlen, atype, bind_flags) \
260261
({ \
261262
u32 __flags = 0; \
262263
int __ret = 0; \
263264
if (cgroup_bpf_enabled(atype)) { \
264265
lock_sock(sk); \
265-
__ret = __cgroup_bpf_run_filter_sock_addr(sk, uaddr, atype, \
266-
NULL, &__flags); \
266+
__ret = __cgroup_bpf_run_filter_sock_addr(sk, uaddr, uaddrlen, \
267+
atype, NULL, &__flags); \
267268
release_sock(sk); \
268269
if (__flags & BPF_RET_BIND_NO_CAP_NET_BIND_SERVICE) \
269270
*bind_flags |= BIND_NO_CAP_NET_BIND_SERVICE; \
@@ -276,29 +277,29 @@ static inline bool cgroup_bpf_sock_enabled(struct sock *sk,
276277
cgroup_bpf_enabled(CGROUP_INET6_CONNECT)) && \
277278
(sk)->sk_prot->pre_connect)
278279

279-
#define BPF_CGROUP_RUN_PROG_INET4_CONNECT(sk, uaddr) \
280-
BPF_CGROUP_RUN_SA_PROG(sk, uaddr, CGROUP_INET4_CONNECT)
280+
#define BPF_CGROUP_RUN_PROG_INET4_CONNECT(sk, uaddr, uaddrlen) \
281+
BPF_CGROUP_RUN_SA_PROG(sk, uaddr, uaddrlen, CGROUP_INET4_CONNECT)
281282

282-
#define BPF_CGROUP_RUN_PROG_INET6_CONNECT(sk, uaddr) \
283-
BPF_CGROUP_RUN_SA_PROG(sk, uaddr, CGROUP_INET6_CONNECT)
283+
#define BPF_CGROUP_RUN_PROG_INET6_CONNECT(sk, uaddr, uaddrlen) \
284+
BPF_CGROUP_RUN_SA_PROG(sk, uaddr, uaddrlen, CGROUP_INET6_CONNECT)
284285

285-
#define BPF_CGROUP_RUN_PROG_INET4_CONNECT_LOCK(sk, uaddr) \
286-
BPF_CGROUP_RUN_SA_PROG_LOCK(sk, uaddr, CGROUP_INET4_CONNECT, NULL)
286+
#define BPF_CGROUP_RUN_PROG_INET4_CONNECT_LOCK(sk, uaddr, uaddrlen) \
287+
BPF_CGROUP_RUN_SA_PROG_LOCK(sk, uaddr, uaddrlen, CGROUP_INET4_CONNECT, NULL)
287288

288-
#define BPF_CGROUP_RUN_PROG_INET6_CONNECT_LOCK(sk, uaddr) \
289-
BPF_CGROUP_RUN_SA_PROG_LOCK(sk, uaddr, CGROUP_INET6_CONNECT, NULL)
289+
#define BPF_CGROUP_RUN_PROG_INET6_CONNECT_LOCK(sk, uaddr, uaddrlen) \
290+
BPF_CGROUP_RUN_SA_PROG_LOCK(sk, uaddr, uaddrlen, CGROUP_INET6_CONNECT, NULL)
290291

291-
#define BPF_CGROUP_RUN_PROG_UDP4_SENDMSG_LOCK(sk, uaddr, t_ctx) \
292-
BPF_CGROUP_RUN_SA_PROG_LOCK(sk, uaddr, CGROUP_UDP4_SENDMSG, t_ctx)
292+
#define BPF_CGROUP_RUN_PROG_UDP4_SENDMSG_LOCK(sk, uaddr, uaddrlen, t_ctx) \
293+
BPF_CGROUP_RUN_SA_PROG_LOCK(sk, uaddr, uaddrlen, CGROUP_UDP4_SENDMSG, t_ctx)
293294

294-
#define BPF_CGROUP_RUN_PROG_UDP6_SENDMSG_LOCK(sk, uaddr, t_ctx) \
295-
BPF_CGROUP_RUN_SA_PROG_LOCK(sk, uaddr, CGROUP_UDP6_SENDMSG, t_ctx)
295+
#define BPF_CGROUP_RUN_PROG_UDP6_SENDMSG_LOCK(sk, uaddr, uaddrlen, t_ctx) \
296+
BPF_CGROUP_RUN_SA_PROG_LOCK(sk, uaddr, uaddrlen, CGROUP_UDP6_SENDMSG, t_ctx)
296297

297-
#define BPF_CGROUP_RUN_PROG_UDP4_RECVMSG_LOCK(sk, uaddr) \
298-
BPF_CGROUP_RUN_SA_PROG_LOCK(sk, uaddr, CGROUP_UDP4_RECVMSG, NULL)
298+
#define BPF_CGROUP_RUN_PROG_UDP4_RECVMSG_LOCK(sk, uaddr, uaddrlen) \
299+
BPF_CGROUP_RUN_SA_PROG_LOCK(sk, uaddr, uaddrlen, CGROUP_UDP4_RECVMSG, NULL)
299300

300-
#define BPF_CGROUP_RUN_PROG_UDP6_RECVMSG_LOCK(sk, uaddr) \
301-
BPF_CGROUP_RUN_SA_PROG_LOCK(sk, uaddr, CGROUP_UDP6_RECVMSG, NULL)
301+
#define BPF_CGROUP_RUN_PROG_UDP6_RECVMSG_LOCK(sk, uaddr, uaddrlen) \
302+
BPF_CGROUP_RUN_SA_PROG_LOCK(sk, uaddr, uaddrlen, CGROUP_UDP6_RECVMSG, NULL)
302303

303304
/* The SOCK_OPS"_SK" macro should be used when sock_ops->sk is not a
304305
* fullsock and its parent fullsock cannot be traced by
@@ -477,24 +478,24 @@ static inline int bpf_percpu_cgroup_storage_update(struct bpf_map *map,
477478
}
478479

479480
#define cgroup_bpf_enabled(atype) (0)
480-
#define BPF_CGROUP_RUN_SA_PROG_LOCK(sk, uaddr, atype, t_ctx) ({ 0; })
481-
#define BPF_CGROUP_RUN_SA_PROG(sk, uaddr, atype) ({ 0; })
481+
#define BPF_CGROUP_RUN_SA_PROG_LOCK(sk, uaddr, uaddrlen, atype, t_ctx) ({ 0; })
482+
#define BPF_CGROUP_RUN_SA_PROG(sk, uaddr, uaddrlen, atype) ({ 0; })
482483
#define BPF_CGROUP_PRE_CONNECT_ENABLED(sk) (0)
483484
#define BPF_CGROUP_RUN_PROG_INET_INGRESS(sk,skb) ({ 0; })
484485
#define BPF_CGROUP_RUN_PROG_INET_EGRESS(sk,skb) ({ 0; })
485486
#define BPF_CGROUP_RUN_PROG_INET_SOCK(sk) ({ 0; })
486487
#define BPF_CGROUP_RUN_PROG_INET_SOCK_RELEASE(sk) ({ 0; })
487-
#define BPF_CGROUP_RUN_PROG_INET_BIND_LOCK(sk, uaddr, atype, flags) ({ 0; })
488+
#define BPF_CGROUP_RUN_PROG_INET_BIND_LOCK(sk, uaddr, uaddrlen, atype, flags) ({ 0; })
488489
#define BPF_CGROUP_RUN_PROG_INET4_POST_BIND(sk) ({ 0; })
489490
#define BPF_CGROUP_RUN_PROG_INET6_POST_BIND(sk) ({ 0; })
490-
#define BPF_CGROUP_RUN_PROG_INET4_CONNECT(sk, uaddr) ({ 0; })
491-
#define BPF_CGROUP_RUN_PROG_INET4_CONNECT_LOCK(sk, uaddr) ({ 0; })
492-
#define BPF_CGROUP_RUN_PROG_INET6_CONNECT(sk, uaddr) ({ 0; })
493-
#define BPF_CGROUP_RUN_PROG_INET6_CONNECT_LOCK(sk, uaddr) ({ 0; })
494-
#define BPF_CGROUP_RUN_PROG_UDP4_SENDMSG_LOCK(sk, uaddr, t_ctx) ({ 0; })
495-
#define BPF_CGROUP_RUN_PROG_UDP6_SENDMSG_LOCK(sk, uaddr, t_ctx) ({ 0; })
496-
#define BPF_CGROUP_RUN_PROG_UDP4_RECVMSG_LOCK(sk, uaddr) ({ 0; })
497-
#define BPF_CGROUP_RUN_PROG_UDP6_RECVMSG_LOCK(sk, uaddr) ({ 0; })
491+
#define BPF_CGROUP_RUN_PROG_INET4_CONNECT(sk, uaddr, uaddrlen) ({ 0; })
492+
#define BPF_CGROUP_RUN_PROG_INET4_CONNECT_LOCK(sk, uaddr, uaddrlen) ({ 0; })
493+
#define BPF_CGROUP_RUN_PROG_INET6_CONNECT(sk, uaddr, uaddrlen) ({ 0; })
494+
#define BPF_CGROUP_RUN_PROG_INET6_CONNECT_LOCK(sk, uaddr, uaddrlen) ({ 0; })
495+
#define BPF_CGROUP_RUN_PROG_UDP4_SENDMSG_LOCK(sk, uaddr, uaddrlen, t_ctx) ({ 0; })
496+
#define BPF_CGROUP_RUN_PROG_UDP6_SENDMSG_LOCK(sk, uaddr, uaddrlen, t_ctx) ({ 0; })
497+
#define BPF_CGROUP_RUN_PROG_UDP4_RECVMSG_LOCK(sk, uaddr, uaddrlen) ({ 0; })
498+
#define BPF_CGROUP_RUN_PROG_UDP6_RECVMSG_LOCK(sk, uaddr, uaddrlen) ({ 0; })
498499
#define BPF_CGROUP_RUN_PROG_SOCK_OPS(sock_ops) ({ 0; })
499500
#define BPF_CGROUP_RUN_PROG_DEVICE_CGROUP(atype, major, minor, access) ({ 0; })
500501
#define BPF_CGROUP_RUN_PROG_SYSCTL(head,table,write,buf,count,pos) ({ 0; })

include/linux/filter.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1335,6 +1335,7 @@ struct bpf_sock_addr_kern {
13351335
*/
13361336
u64 tmp_reg;
13371337
void *t_ctx; /* Attach type specific context. */
1338+
u32 uaddrlen;
13381339
};
13391340

13401341
struct bpf_sock_ops_kern {

kernel/bpf/cgroup.c

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1450,6 +1450,9 @@ EXPORT_SYMBOL(__cgroup_bpf_run_filter_sk);
14501450
* provided by user sockaddr
14511451
* @sk: sock struct that will use sockaddr
14521452
* @uaddr: sockaddr struct provided by user
1453+
* @uaddrlen: Pointer to the size of the sockaddr struct provided by user. It is
1454+
* read-only for AF_INET[6] uaddr but can be modified for AF_UNIX
1455+
* uaddr.
14531456
* @atype: The type of program to be executed
14541457
* @t_ctx: Pointer to attach type specific context
14551458
* @flags: Pointer to u32 which contains higher bits of BPF program
@@ -1462,6 +1465,7 @@ EXPORT_SYMBOL(__cgroup_bpf_run_filter_sk);
14621465
*/
14631466
int __cgroup_bpf_run_filter_sock_addr(struct sock *sk,
14641467
struct sockaddr *uaddr,
1468+
int *uaddrlen,
14651469
enum cgroup_bpf_attach_type atype,
14661470
void *t_ctx,
14671471
u32 *flags)
@@ -1473,6 +1477,7 @@ int __cgroup_bpf_run_filter_sock_addr(struct sock *sk,
14731477
};
14741478
struct sockaddr_storage unspec;
14751479
struct cgroup *cgrp;
1480+
int ret;
14761481

14771482
/* Check socket family since not all sockets represent network
14781483
* endpoint (e.g. AF_UNIX).
@@ -1483,11 +1488,19 @@ int __cgroup_bpf_run_filter_sock_addr(struct sock *sk,
14831488
if (!ctx.uaddr) {
14841489
memset(&unspec, 0, sizeof(unspec));
14851490
ctx.uaddr = (struct sockaddr *)&unspec;
1491+
ctx.uaddrlen = 0;
1492+
} else {
1493+
ctx.uaddrlen = *uaddrlen;
14861494
}
14871495

14881496
cgrp = sock_cgroup_ptr(&sk->sk_cgrp_data);
1489-
return bpf_prog_run_array_cg(&cgrp->bpf, atype, &ctx, bpf_prog_run,
1490-
0, flags);
1497+
ret = bpf_prog_run_array_cg(&cgrp->bpf, atype, &ctx, bpf_prog_run,
1498+
0, flags);
1499+
1500+
if (!ret && uaddr)
1501+
*uaddrlen = ctx.uaddrlen;
1502+
1503+
return ret;
14911504
}
14921505
EXPORT_SYMBOL(__cgroup_bpf_run_filter_sock_addr);
14931506

net/ipv4/af_inet.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,7 @@ int inet_bind_sk(struct sock *sk, struct sockaddr *uaddr, int addr_len)
452452
/* BPF prog is run before any checks are done so that if the prog
453453
* changes context in a wrong way it will be caught.
454454
*/
455-
err = BPF_CGROUP_RUN_PROG_INET_BIND_LOCK(sk, uaddr,
455+
err = BPF_CGROUP_RUN_PROG_INET_BIND_LOCK(sk, uaddr, &addr_len,
456456
CGROUP_INET4_BIND, &flags);
457457
if (err)
458458
return err;
@@ -788,6 +788,7 @@ int inet_getname(struct socket *sock, struct sockaddr *uaddr,
788788
struct sock *sk = sock->sk;
789789
struct inet_sock *inet = inet_sk(sk);
790790
DECLARE_SOCKADDR(struct sockaddr_in *, sin, uaddr);
791+
int sin_addr_len = sizeof(*sin);
791792

792793
sin->sin_family = AF_INET;
793794
lock_sock(sk);
@@ -800,15 +801,15 @@ int inet_getname(struct socket *sock, struct sockaddr *uaddr,
800801
}
801802
sin->sin_port = inet->inet_dport;
802803
sin->sin_addr.s_addr = inet->inet_daddr;
803-
BPF_CGROUP_RUN_SA_PROG(sk, (struct sockaddr *)sin,
804+
BPF_CGROUP_RUN_SA_PROG(sk, (struct sockaddr *)sin, &sin_addr_len,
804805
CGROUP_INET4_GETPEERNAME);
805806
} else {
806807
__be32 addr = inet->inet_rcv_saddr;
807808
if (!addr)
808809
addr = inet->inet_saddr;
809810
sin->sin_port = inet->inet_sport;
810811
sin->sin_addr.s_addr = addr;
811-
BPF_CGROUP_RUN_SA_PROG(sk, (struct sockaddr *)sin,
812+
BPF_CGROUP_RUN_SA_PROG(sk, (struct sockaddr *)sin, &sin_addr_len,
812813
CGROUP_INET4_GETSOCKNAME);
813814
}
814815
release_sock(sk);

net/ipv4/ping.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ static int ping_pre_connect(struct sock *sk, struct sockaddr *uaddr,
301301
if (addr_len < sizeof(struct sockaddr_in))
302302
return -EINVAL;
303303

304-
return BPF_CGROUP_RUN_PROG_INET4_CONNECT_LOCK(sk, uaddr);
304+
return BPF_CGROUP_RUN_PROG_INET4_CONNECT_LOCK(sk, uaddr, &addr_len);
305305
}
306306

307307
/* Checks the bind address and possibly modifies sk->sk_bound_dev_if. */

net/ipv4/tcp_ipv4.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ static int tcp_v4_pre_connect(struct sock *sk, struct sockaddr *uaddr,
194194

195195
sock_owned_by_me(sk);
196196

197-
return BPF_CGROUP_RUN_PROG_INET4_CONNECT(sk, uaddr);
197+
return BPF_CGROUP_RUN_PROG_INET4_CONNECT(sk, uaddr, &addr_len);
198198
}
199199

200200
/* This will initiate an outgoing connection. */

net/ipv4/udp.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1143,7 +1143,9 @@ int udp_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
11431143

11441144
if (cgroup_bpf_enabled(CGROUP_UDP4_SENDMSG) && !connected) {
11451145
err = BPF_CGROUP_RUN_PROG_UDP4_SENDMSG_LOCK(sk,
1146-
(struct sockaddr *)usin, &ipc.addr);
1146+
(struct sockaddr *)usin,
1147+
&msg->msg_namelen,
1148+
&ipc.addr);
11471149
if (err)
11481150
goto out_free;
11491151
if (usin) {
@@ -1865,7 +1867,8 @@ int udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int flags,
18651867
*addr_len = sizeof(*sin);
18661868

18671869
BPF_CGROUP_RUN_PROG_UDP4_RECVMSG_LOCK(sk,
1868-
(struct sockaddr *)sin);
1870+
(struct sockaddr *)sin,
1871+
addr_len);
18691872
}
18701873

18711874
if (udp_test_bit(GRO_ENABLED, sk))
@@ -1904,7 +1907,7 @@ int udp_pre_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
19041907
if (addr_len < sizeof(struct sockaddr_in))
19051908
return -EINVAL;
19061909

1907-
return BPF_CGROUP_RUN_PROG_INET4_CONNECT_LOCK(sk, uaddr);
1910+
return BPF_CGROUP_RUN_PROG_INET4_CONNECT_LOCK(sk, uaddr, &addr_len);
19081911
}
19091912
EXPORT_SYMBOL(udp_pre_connect);
19101913

net/ipv6/af_inet6.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,7 @@ int inet6_bind_sk(struct sock *sk, struct sockaddr *uaddr, int addr_len)
454454
/* BPF prog is run before any checks are done so that if the prog
455455
* changes context in a wrong way it will be caught.
456456
*/
457-
err = BPF_CGROUP_RUN_PROG_INET_BIND_LOCK(sk, uaddr,
457+
err = BPF_CGROUP_RUN_PROG_INET_BIND_LOCK(sk, uaddr, &addr_len,
458458
CGROUP_INET6_BIND, &flags);
459459
if (err)
460460
return err;
@@ -520,6 +520,7 @@ int inet6_getname(struct socket *sock, struct sockaddr *uaddr,
520520
int peer)
521521
{
522522
struct sockaddr_in6 *sin = (struct sockaddr_in6 *)uaddr;
523+
int sin_addr_len = sizeof(*sin);
523524
struct sock *sk = sock->sk;
524525
struct inet_sock *inet = inet_sk(sk);
525526
struct ipv6_pinfo *np = inet6_sk(sk);
@@ -539,21 +540,21 @@ int inet6_getname(struct socket *sock, struct sockaddr *uaddr,
539540
sin->sin6_addr = sk->sk_v6_daddr;
540541
if (inet6_test_bit(SNDFLOW, sk))
541542
sin->sin6_flowinfo = np->flow_label;
542-
BPF_CGROUP_RUN_SA_PROG(sk, (struct sockaddr *)sin,
543+
BPF_CGROUP_RUN_SA_PROG(sk, (struct sockaddr *)sin, &sin_addr_len,
543544
CGROUP_INET6_GETPEERNAME);
544545
} else {
545546
if (ipv6_addr_any(&sk->sk_v6_rcv_saddr))
546547
sin->sin6_addr = np->saddr;
547548
else
548549
sin->sin6_addr = sk->sk_v6_rcv_saddr;
549550
sin->sin6_port = inet->inet_sport;
550-
BPF_CGROUP_RUN_SA_PROG(sk, (struct sockaddr *)sin,
551+
BPF_CGROUP_RUN_SA_PROG(sk, (struct sockaddr *)sin, &sin_addr_len,
551552
CGROUP_INET6_GETSOCKNAME);
552553
}
553554
sin->sin6_scope_id = ipv6_iface_scope_id(&sin->sin6_addr,
554555
sk->sk_bound_dev_if);
555556
release_sock(sk);
556-
return sizeof(*sin);
557+
return sin_addr_len;
557558
}
558559
EXPORT_SYMBOL(inet6_getname);
559560

net/ipv6/ping.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ static int ping_v6_pre_connect(struct sock *sk, struct sockaddr *uaddr,
5656
if (addr_len < SIN6_LEN_RFC2133)
5757
return -EINVAL;
5858

59-
return BPF_CGROUP_RUN_PROG_INET6_CONNECT_LOCK(sk, uaddr);
59+
return BPF_CGROUP_RUN_PROG_INET6_CONNECT_LOCK(sk, uaddr, &addr_len);
6060
}
6161

6262
static int ping_v6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)

net/ipv6/tcp_ipv6.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ static int tcp_v6_pre_connect(struct sock *sk, struct sockaddr *uaddr,
135135

136136
sock_owned_by_me(sk);
137137

138-
return BPF_CGROUP_RUN_PROG_INET6_CONNECT(sk, uaddr);
138+
return BPF_CGROUP_RUN_PROG_INET6_CONNECT(sk, uaddr, &addr_len);
139139
}
140140

141141
static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr,

0 commit comments

Comments
 (0)