Merge tag 'net-5.16-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Pull networking fixes from Jakub Kicinski:
"Including fixes from bpf, can and netfilter.
Current release - regressions:
- bpf: do not reject when the stack read size is different from the
tracked scalar size
- net: fix premature exit from NAPI state polling in napi_disable()
- riscv, bpf: fix RV32 broken build, and silence RV64 warning
Current release - new code bugs:
- net: fix possible NULL deref in sock_reserve_memory
- amt: fix error return code in amt_init(); fix stopping the
workqueue
- ax88796c: use the correct ioctl callback
Previous releases - always broken:
- bpf: stop caching subprog index in the bpf_pseudo_func insn
- security: fixups for the security hooks in sctp
- nfc: add necessary privilege flags in netlink layer, limit
operations to admin only
- vsock: prevent unnecessary refcnt inc for non-blocking connect
- net/smc: fix sk_refcnt underflow on link down and fallback
- nfnetlink_queue: fix OOB when mac header was cleared
- can: j1939: ignore invalid messages per standard
- bpf, sockmap:
- fix race in ingress receive verdict with redirect to self
- fix incorrect sk_skb data_end access when src_reg = dst_reg
- strparser, and tls are reusing qdisc_skb_cb and colliding
- ethtool: fix ethtool msg len calculation for pause stats
- vlan: fix a UAF in vlan_dev_real_dev() when ref-holder tries to
access an unregistering real_dev
- udp6: make encap_rcv() bump the v6 not v4 stats
- drv: prestera: add explicit padding to fix m68k build
- drv: felix: fix broken VLAN-tagged PTP under VLAN-aware bridge
- drv: mvpp2: fix wrong SerDes reconfiguration order
Misc & small latecomers:
- ipvs: auto-load ipvs on genl access
- mctp: sanity check the struct sockaddr_mctp padding fields
- libfs: support RENAME_EXCHANGE in simple_rename()
- avoid double accounting for pure zerocopy skbs"
* tag 'net-5.16-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (123 commits)
selftests/net: udpgso_bench_rx: fix port argument
net: wwan: iosm: fix compilation warning
cxgb4: fix eeprom len when diagnostics not implemented
net: fix premature exit from NAPI state polling in napi_disable()
net/smc: fix sk_refcnt underflow on linkdown and fallback
net/mlx5: Lag, fix a potential Oops with mlx5_lag_create_definer()
gve: fix unmatched u64_stats_update_end()
net: ethernet: lantiq_etop: Fix compilation error
selftests: forwarding: Fix packet matching in mirroring selftests
vsock: prevent unnecessary refcnt inc for nonblocking connect
net: marvell: mvpp2: Fix wrong SerDes reconfiguration order
net: ethernet: ti: cpsw_ale: Fix access to un-initialized memory
net: stmmac: allow a tc-taprio base-time of zero
selftests: net: test_vxlan_under_vrf: fix HV connectivity test
net: hns3: allow configure ETS bandwidth of all TCs
net: hns3: remove check VF uc mac exist when set by PF
net: hns3: fix some mac statistics is always 0 in device version V2
net: hns3: fix kernel crash when unload VF while it is being reset
net: hns3: sync rx ring head in echo common pull
net: hns3: fix pfc packet number incorrect after querying pfc parameters
...
This commit is contained in:
+11
-4
@@ -2367,9 +2367,9 @@ int security_tun_dev_open(void *security)
|
||||
}
|
||||
EXPORT_SYMBOL(security_tun_dev_open);
|
||||
|
||||
int security_sctp_assoc_request(struct sctp_endpoint *ep, struct sk_buff *skb)
|
||||
int security_sctp_assoc_request(struct sctp_association *asoc, struct sk_buff *skb)
|
||||
{
|
||||
return call_int_hook(sctp_assoc_request, 0, ep, skb);
|
||||
return call_int_hook(sctp_assoc_request, 0, asoc, skb);
|
||||
}
|
||||
EXPORT_SYMBOL(security_sctp_assoc_request);
|
||||
|
||||
@@ -2381,13 +2381,20 @@ int security_sctp_bind_connect(struct sock *sk, int optname,
|
||||
}
|
||||
EXPORT_SYMBOL(security_sctp_bind_connect);
|
||||
|
||||
void security_sctp_sk_clone(struct sctp_endpoint *ep, struct sock *sk,
|
||||
void security_sctp_sk_clone(struct sctp_association *asoc, struct sock *sk,
|
||||
struct sock *newsk)
|
||||
{
|
||||
call_void_hook(sctp_sk_clone, ep, sk, newsk);
|
||||
call_void_hook(sctp_sk_clone, asoc, sk, newsk);
|
||||
}
|
||||
EXPORT_SYMBOL(security_sctp_sk_clone);
|
||||
|
||||
void security_sctp_assoc_established(struct sctp_association *asoc,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
call_void_hook(sctp_assoc_established, asoc, skb);
|
||||
}
|
||||
EXPORT_SYMBOL(security_sctp_assoc_established);
|
||||
|
||||
#endif /* CONFIG_SECURITY_NETWORK */
|
||||
|
||||
#ifdef CONFIG_SECURITY_INFINIBAND
|
||||
|
||||
+23
-11
@@ -5339,10 +5339,10 @@ static void selinux_sock_graft(struct sock *sk, struct socket *parent)
|
||||
* connect(2), sctp_connectx(3) or sctp_sendmsg(3) (with no association
|
||||
* already present).
|
||||
*/
|
||||
static int selinux_sctp_assoc_request(struct sctp_endpoint *ep,
|
||||
static int selinux_sctp_assoc_request(struct sctp_association *asoc,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
struct sk_security_struct *sksec = ep->base.sk->sk_security;
|
||||
struct sk_security_struct *sksec = asoc->base.sk->sk_security;
|
||||
struct common_audit_data ad;
|
||||
struct lsm_network_audit net = {0,};
|
||||
u8 peerlbl_active;
|
||||
@@ -5359,7 +5359,7 @@ static int selinux_sctp_assoc_request(struct sctp_endpoint *ep,
|
||||
/* This will return peer_sid = SECSID_NULL if there are
|
||||
* no peer labels, see security_net_peersid_resolve().
|
||||
*/
|
||||
err = selinux_skb_peerlbl_sid(skb, ep->base.sk->sk_family,
|
||||
err = selinux_skb_peerlbl_sid(skb, asoc->base.sk->sk_family,
|
||||
&peer_sid);
|
||||
if (err)
|
||||
return err;
|
||||
@@ -5383,7 +5383,7 @@ static int selinux_sctp_assoc_request(struct sctp_endpoint *ep,
|
||||
*/
|
||||
ad.type = LSM_AUDIT_DATA_NET;
|
||||
ad.u.net = &net;
|
||||
ad.u.net->sk = ep->base.sk;
|
||||
ad.u.net->sk = asoc->base.sk;
|
||||
err = avc_has_perm(&selinux_state,
|
||||
sksec->peer_sid, peer_sid, sksec->sclass,
|
||||
SCTP_SOCKET__ASSOCIATION, &ad);
|
||||
@@ -5392,7 +5392,7 @@ static int selinux_sctp_assoc_request(struct sctp_endpoint *ep,
|
||||
}
|
||||
|
||||
/* Compute the MLS component for the connection and store
|
||||
* the information in ep. This will be used by SCTP TCP type
|
||||
* the information in asoc. This will be used by SCTP TCP type
|
||||
* sockets and peeled off connections as they cause a new
|
||||
* socket to be generated. selinux_sctp_sk_clone() will then
|
||||
* plug this into the new socket.
|
||||
@@ -5401,11 +5401,11 @@ static int selinux_sctp_assoc_request(struct sctp_endpoint *ep,
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
ep->secid = conn_sid;
|
||||
ep->peer_secid = peer_sid;
|
||||
asoc->secid = conn_sid;
|
||||
asoc->peer_secid = peer_sid;
|
||||
|
||||
/* Set any NetLabel labels including CIPSO/CALIPSO options. */
|
||||
return selinux_netlbl_sctp_assoc_request(ep, skb);
|
||||
return selinux_netlbl_sctp_assoc_request(asoc, skb);
|
||||
}
|
||||
|
||||
/* Check if sctp IPv4/IPv6 addresses are valid for binding or connecting
|
||||
@@ -5490,7 +5490,7 @@ static int selinux_sctp_bind_connect(struct sock *sk, int optname,
|
||||
}
|
||||
|
||||
/* Called whenever a new socket is created by accept(2) or sctp_peeloff(3). */
|
||||
static void selinux_sctp_sk_clone(struct sctp_endpoint *ep, struct sock *sk,
|
||||
static void selinux_sctp_sk_clone(struct sctp_association *asoc, struct sock *sk,
|
||||
struct sock *newsk)
|
||||
{
|
||||
struct sk_security_struct *sksec = sk->sk_security;
|
||||
@@ -5502,8 +5502,9 @@ static void selinux_sctp_sk_clone(struct sctp_endpoint *ep, struct sock *sk,
|
||||
if (!selinux_policycap_extsockclass())
|
||||
return selinux_sk_clone_security(sk, newsk);
|
||||
|
||||
newsksec->sid = ep->secid;
|
||||
newsksec->peer_sid = ep->peer_secid;
|
||||
if (asoc->secid != SECSID_WILD)
|
||||
newsksec->sid = asoc->secid;
|
||||
newsksec->peer_sid = asoc->peer_secid;
|
||||
newsksec->sclass = sksec->sclass;
|
||||
selinux_netlbl_sctp_sk_clone(sk, newsk);
|
||||
}
|
||||
@@ -5558,6 +5559,16 @@ static void selinux_inet_conn_established(struct sock *sk, struct sk_buff *skb)
|
||||
selinux_skb_peerlbl_sid(skb, family, &sksec->peer_sid);
|
||||
}
|
||||
|
||||
static void selinux_sctp_assoc_established(struct sctp_association *asoc,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
struct sk_security_struct *sksec = asoc->base.sk->sk_security;
|
||||
|
||||
selinux_inet_conn_established(asoc->base.sk, skb);
|
||||
asoc->peer_secid = sksec->peer_sid;
|
||||
asoc->secid = SECSID_WILD;
|
||||
}
|
||||
|
||||
static int selinux_secmark_relabel_packet(u32 sid)
|
||||
{
|
||||
const struct task_security_struct *__tsec;
|
||||
@@ -7228,6 +7239,7 @@ static struct security_hook_list selinux_hooks[] __lsm_ro_after_init = {
|
||||
LSM_HOOK_INIT(sctp_assoc_request, selinux_sctp_assoc_request),
|
||||
LSM_HOOK_INIT(sctp_sk_clone, selinux_sctp_sk_clone),
|
||||
LSM_HOOK_INIT(sctp_bind_connect, selinux_sctp_bind_connect),
|
||||
LSM_HOOK_INIT(sctp_assoc_established, selinux_sctp_assoc_established),
|
||||
LSM_HOOK_INIT(inet_conn_request, selinux_inet_conn_request),
|
||||
LSM_HOOK_INIT(inet_csk_clone, selinux_inet_csk_clone),
|
||||
LSM_HOOK_INIT(inet_conn_established, selinux_inet_conn_established),
|
||||
|
||||
@@ -39,7 +39,7 @@ int selinux_netlbl_skbuff_getsid(struct sk_buff *skb,
|
||||
int selinux_netlbl_skbuff_setsid(struct sk_buff *skb,
|
||||
u16 family,
|
||||
u32 sid);
|
||||
int selinux_netlbl_sctp_assoc_request(struct sctp_endpoint *ep,
|
||||
int selinux_netlbl_sctp_assoc_request(struct sctp_association *asoc,
|
||||
struct sk_buff *skb);
|
||||
int selinux_netlbl_inet_conn_request(struct request_sock *req, u16 family);
|
||||
void selinux_netlbl_inet_csk_clone(struct sock *sk, u16 family);
|
||||
@@ -98,7 +98,7 @@ static inline int selinux_netlbl_skbuff_setsid(struct sk_buff *skb,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int selinux_netlbl_sctp_assoc_request(struct sctp_endpoint *ep,
|
||||
static inline int selinux_netlbl_sctp_assoc_request(struct sctp_association *asoc,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
return 0;
|
||||
|
||||
@@ -261,30 +261,30 @@ skbuff_setsid_return:
|
||||
|
||||
/**
|
||||
* selinux_netlbl_sctp_assoc_request - Label an incoming sctp association.
|
||||
* @ep: incoming association endpoint.
|
||||
* @asoc: incoming association.
|
||||
* @skb: the packet.
|
||||
*
|
||||
* Description:
|
||||
* A new incoming connection is represented by @ep, ......
|
||||
* A new incoming connection is represented by @asoc, ......
|
||||
* Returns zero on success, negative values on failure.
|
||||
*
|
||||
*/
|
||||
int selinux_netlbl_sctp_assoc_request(struct sctp_endpoint *ep,
|
||||
int selinux_netlbl_sctp_assoc_request(struct sctp_association *asoc,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
int rc;
|
||||
struct netlbl_lsm_secattr secattr;
|
||||
struct sk_security_struct *sksec = ep->base.sk->sk_security;
|
||||
struct sk_security_struct *sksec = asoc->base.sk->sk_security;
|
||||
struct sockaddr_in addr4;
|
||||
struct sockaddr_in6 addr6;
|
||||
|
||||
if (ep->base.sk->sk_family != PF_INET &&
|
||||
ep->base.sk->sk_family != PF_INET6)
|
||||
if (asoc->base.sk->sk_family != PF_INET &&
|
||||
asoc->base.sk->sk_family != PF_INET6)
|
||||
return 0;
|
||||
|
||||
netlbl_secattr_init(&secattr);
|
||||
rc = security_netlbl_sid_to_secattr(&selinux_state,
|
||||
ep->secid, &secattr);
|
||||
asoc->secid, &secattr);
|
||||
if (rc != 0)
|
||||
goto assoc_request_return;
|
||||
|
||||
@@ -294,11 +294,11 @@ int selinux_netlbl_sctp_assoc_request(struct sctp_endpoint *ep,
|
||||
if (ip_hdr(skb)->version == 4) {
|
||||
addr4.sin_family = AF_INET;
|
||||
addr4.sin_addr.s_addr = ip_hdr(skb)->saddr;
|
||||
rc = netlbl_conn_setattr(ep->base.sk, (void *)&addr4, &secattr);
|
||||
rc = netlbl_conn_setattr(asoc->base.sk, (void *)&addr4, &secattr);
|
||||
} else if (IS_ENABLED(CONFIG_IPV6) && ip_hdr(skb)->version == 6) {
|
||||
addr6.sin6_family = AF_INET6;
|
||||
addr6.sin6_addr = ipv6_hdr(skb)->saddr;
|
||||
rc = netlbl_conn_setattr(ep->base.sk, (void *)&addr6, &secattr);
|
||||
rc = netlbl_conn_setattr(asoc->base.sk, (void *)&addr6, &secattr);
|
||||
} else {
|
||||
rc = -EAFNOSUPPORT;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user