Import of kernel-5.14.0-687.25.1.el9_8
This commit is contained in:
parent
723965590d
commit
3c417b1ec1
@ -2567,7 +2567,7 @@ int bpf_arch_text_poke(void *ip, enum bpf_text_poke_type poke_type,
|
||||
u64 plt_target = 0ULL;
|
||||
bool poking_bpf_entry;
|
||||
|
||||
if (!__bpf_address_lookup((unsigned long)ip, &size, &offset, namebuf))
|
||||
if (!bpf_address_lookup((unsigned long)ip, &size, &offset, namebuf))
|
||||
/* Only poking bpf text is supported. Since kernel function
|
||||
* entry is set up by ftrace, we reply on ftrace to poke kernel
|
||||
* functions.
|
||||
|
||||
@ -1096,7 +1096,7 @@ int bpf_arch_text_poke(void *ip, enum bpf_text_poke_type poke_type,
|
||||
branch_flags = poke_type == BPF_MOD_CALL ? BRANCH_SET_LINK : 0;
|
||||
|
||||
/* We currently only support poking bpf programs */
|
||||
if (!__bpf_address_lookup(bpf_func, &size, &offset, name)) {
|
||||
if (!bpf_address_lookup(bpf_func, &size, &offset, name)) {
|
||||
pr_err("%s (0x%lx): kernel/modules are not supported\n", __func__, bpf_func);
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
@ -29,8 +29,11 @@ static int ccp_aes_complete(struct crypto_async_request *async_req, int ret)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (ctx->u.aes.mode != CCP_AES_MODE_ECB)
|
||||
memcpy(req->iv, rctx->iv, AES_BLOCK_SIZE);
|
||||
if (ctx->u.aes.mode != CCP_AES_MODE_ECB) {
|
||||
size_t ivsize = crypto_skcipher_ivsize(crypto_skcipher_reqtfm(req));
|
||||
|
||||
memcpy(req->iv, rctx->iv, ivsize);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1249,24 +1249,13 @@ static inline bool bpf_jit_kallsyms_enabled(void)
|
||||
return false;
|
||||
}
|
||||
|
||||
const char *__bpf_address_lookup(unsigned long addr, unsigned long *size,
|
||||
unsigned long *off, char *sym);
|
||||
const char *bpf_address_lookup(unsigned long addr, unsigned long *size,
|
||||
unsigned long *off, char *sym);
|
||||
bool is_bpf_text_address(unsigned long addr);
|
||||
int bpf_get_kallsym(unsigned int symnum, unsigned long *value, char *type,
|
||||
char *sym);
|
||||
struct bpf_prog *bpf_prog_ksym_find(unsigned long addr);
|
||||
|
||||
static inline const char *
|
||||
bpf_address_lookup(unsigned long addr, unsigned long *size,
|
||||
unsigned long *off, char **modname, char *sym)
|
||||
{
|
||||
const char *ret = __bpf_address_lookup(addr, size, off, sym);
|
||||
|
||||
if (ret && modname)
|
||||
*modname = NULL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
void bpf_prog_kallsyms_add(struct bpf_prog *fp);
|
||||
void bpf_prog_kallsyms_del(struct bpf_prog *fp);
|
||||
|
||||
@ -1305,8 +1294,8 @@ static inline bool bpf_jit_kallsyms_enabled(void)
|
||||
}
|
||||
|
||||
static inline const char *
|
||||
__bpf_address_lookup(unsigned long addr, unsigned long *size,
|
||||
unsigned long *off, char *sym)
|
||||
bpf_address_lookup(unsigned long addr, unsigned long *size,
|
||||
unsigned long *off, char *sym)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
@ -1327,13 +1316,6 @@ static inline struct bpf_prog *bpf_prog_ksym_find(unsigned long addr)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline const char *
|
||||
bpf_address_lookup(unsigned long addr, unsigned long *size,
|
||||
unsigned long *off, char **modname, char *sym)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void bpf_prog_kallsyms_add(struct bpf_prog *fp)
|
||||
{
|
||||
}
|
||||
|
||||
@ -1,3 +1,3 @@
|
||||
sbat,1,SBAT Version,sbat,1,https://github.com/rhboot/shim/blob/main/SBAT.md
|
||||
kernel.rhel,1,Red Hat,kernel-core,5.14.0-687.24.1.el9.x86_64,mailto:secalert@redhat.com
|
||||
kernel.almalinux,1,AlmaLinux,kernel-core,5.14.0-687.24.1.el9.x86_64,mailto:security@almalinux.org
|
||||
kernel.rhel,1,Red Hat,kernel-core,5.14.0-687.25.1.el9.x86_64,mailto:secalert@redhat.com
|
||||
kernel.almalinux,1,AlmaLinux,kernel-core,5.14.0-687.25.1.el9.x86_64,mailto:security@almalinux.org
|
||||
|
||||
@ -742,8 +742,8 @@ static struct bpf_ksym *bpf_ksym_find(unsigned long addr)
|
||||
return n ? container_of(n, struct bpf_ksym, tnode) : NULL;
|
||||
}
|
||||
|
||||
const char *__bpf_address_lookup(unsigned long addr, unsigned long *size,
|
||||
unsigned long *off, char *sym)
|
||||
const char *bpf_address_lookup(unsigned long addr, unsigned long *size,
|
||||
unsigned long *off, char *sym)
|
||||
{
|
||||
struct bpf_ksym *ksym;
|
||||
char *ret = NULL;
|
||||
|
||||
@ -391,7 +391,7 @@ int kallsyms_lookup_size_offset(unsigned long addr, unsigned long *symbolsize,
|
||||
return 1;
|
||||
}
|
||||
return !!module_address_lookup(addr, symbolsize, offset, NULL, NULL, namebuf) ||
|
||||
!!__bpf_address_lookup(addr, symbolsize, offset, namebuf);
|
||||
!!bpf_address_lookup(addr, symbolsize, offset, namebuf);
|
||||
}
|
||||
|
||||
static const char *kallsyms_lookup_buildid(unsigned long addr,
|
||||
@ -403,6 +403,14 @@ static const char *kallsyms_lookup_buildid(unsigned long addr,
|
||||
|
||||
namebuf[KSYM_NAME_LEN - 1] = 0;
|
||||
namebuf[0] = 0;
|
||||
/*
|
||||
* Initialize the module-related return values. They are not set
|
||||
* when the symbol is in vmlinux or it is a bpf address.
|
||||
*/
|
||||
if (modname)
|
||||
*modname = NULL;
|
||||
if (modbuildid)
|
||||
*modbuildid = NULL;
|
||||
|
||||
if (is_ksym_addr(addr)) {
|
||||
unsigned long pos;
|
||||
@ -411,10 +419,6 @@ static const char *kallsyms_lookup_buildid(unsigned long addr,
|
||||
/* Grab name */
|
||||
kallsyms_expand_symbol(get_symbol_offset(pos),
|
||||
namebuf, KSYM_NAME_LEN);
|
||||
if (modname)
|
||||
*modname = NULL;
|
||||
if (modbuildid)
|
||||
*modbuildid = NULL;
|
||||
|
||||
ret = namebuf;
|
||||
goto found;
|
||||
@ -424,8 +428,7 @@ static const char *kallsyms_lookup_buildid(unsigned long addr,
|
||||
ret = module_address_lookup(addr, symbolsize, offset,
|
||||
modname, modbuildid, namebuf);
|
||||
if (!ret)
|
||||
ret = bpf_address_lookup(addr, symbolsize,
|
||||
offset, modname, namebuf);
|
||||
ret = bpf_address_lookup(addr, symbolsize, offset, namebuf);
|
||||
|
||||
if (!ret)
|
||||
ret = ftrace_mod_address_lookup(addr, symbolsize,
|
||||
|
||||
@ -202,11 +202,12 @@ void br_do_proxy_suppress_arp(struct sk_buff *skb, struct net_bridge *br,
|
||||
|
||||
f = br_fdb_find_rcu(br, n->ha, vid);
|
||||
if (f) {
|
||||
const struct net_bridge_port *dst = READ_ONCE(f->dst);
|
||||
bool replied = false;
|
||||
|
||||
if ((p && (p->flags & BR_PROXYARP)) ||
|
||||
(f->dst && (f->dst->flags & BR_PROXYARP_WIFI)) ||
|
||||
br_is_neigh_suppress_enabled(f->dst, vid)) {
|
||||
(dst && (dst->flags & BR_PROXYARP_WIFI)) ||
|
||||
br_is_neigh_suppress_enabled(dst, vid)) {
|
||||
if (!vid)
|
||||
br_arp_send(br, p, skb->dev, sip, tip,
|
||||
sha, n->ha, sha, 0, 0);
|
||||
@ -466,9 +467,10 @@ void br_do_suppress_nd(struct sk_buff *skb, struct net_bridge *br,
|
||||
|
||||
f = br_fdb_find_rcu(br, n->ha, vid);
|
||||
if (f) {
|
||||
const struct net_bridge_port *dst = READ_ONCE(f->dst);
|
||||
bool replied = false;
|
||||
|
||||
if (br_is_neigh_suppress_enabled(f->dst, vid)) {
|
||||
if (br_is_neigh_suppress_enabled(dst, vid)) {
|
||||
if (vid != 0)
|
||||
br_nd_send(br, p, skb, n,
|
||||
skb->vlan_proto,
|
||||
|
||||
@ -243,6 +243,7 @@ struct net_device *br_fdb_find_port(const struct net_device *br_dev,
|
||||
const unsigned char *addr,
|
||||
__u16 vid)
|
||||
{
|
||||
const struct net_bridge_port *dst;
|
||||
struct net_bridge_fdb_entry *f;
|
||||
struct net_device *dev = NULL;
|
||||
struct net_bridge *br;
|
||||
@ -255,8 +256,11 @@ struct net_device *br_fdb_find_port(const struct net_device *br_dev,
|
||||
br = netdev_priv(br_dev);
|
||||
rcu_read_lock();
|
||||
f = br_fdb_find_rcu(br, addr, vid);
|
||||
if (f && f->dst)
|
||||
dev = f->dst->dev;
|
||||
if (f) {
|
||||
dst = READ_ONCE(f->dst);
|
||||
if (dst)
|
||||
dev = dst->dev;
|
||||
}
|
||||
rcu_read_unlock();
|
||||
|
||||
return dev;
|
||||
@ -353,7 +357,7 @@ static void fdb_delete_local(struct net_bridge *br,
|
||||
vg = nbp_vlan_group(op);
|
||||
if (op != p && ether_addr_equal(op->dev->dev_addr, addr) &&
|
||||
(!vid || br_vlan_find(vg, vid))) {
|
||||
f->dst = op;
|
||||
WRITE_ONCE(f->dst, op);
|
||||
clear_bit(BR_FDB_ADDED_BY_USER, &f->flags);
|
||||
return;
|
||||
}
|
||||
@ -364,7 +368,7 @@ static void fdb_delete_local(struct net_bridge *br,
|
||||
/* Maybe bridge device has same hw addr? */
|
||||
if (p && ether_addr_equal(br->dev->dev_addr, addr) &&
|
||||
(!vid || (v && br_vlan_should_use(v)))) {
|
||||
f->dst = NULL;
|
||||
WRITE_ONCE(f->dst, NULL);
|
||||
clear_bit(BR_FDB_ADDED_BY_USER, &f->flags);
|
||||
return;
|
||||
}
|
||||
@ -827,6 +831,7 @@ int br_fdb_test_addr(struct net_device *dev, unsigned char *addr)
|
||||
int br_fdb_fillbuf(struct net_bridge *br, void *buf,
|
||||
unsigned long maxnum, unsigned long skip)
|
||||
{
|
||||
const struct net_bridge_port *dst;
|
||||
struct net_bridge_fdb_entry *f;
|
||||
struct __fdb_entry *fe = buf;
|
||||
int num = 0;
|
||||
@ -842,7 +847,8 @@ int br_fdb_fillbuf(struct net_bridge *br, void *buf,
|
||||
continue;
|
||||
|
||||
/* ignore pseudo entry for local MAC address */
|
||||
if (!f->dst)
|
||||
dst = READ_ONCE(f->dst);
|
||||
if (!dst)
|
||||
continue;
|
||||
|
||||
if (skip) {
|
||||
@ -854,8 +860,8 @@ int br_fdb_fillbuf(struct net_bridge *br, void *buf,
|
||||
memcpy(fe->mac_addr, f->key.addr.addr, ETH_ALEN);
|
||||
|
||||
/* due to ABI compat need to split into hi/lo */
|
||||
fe->port_no = f->dst->port_no;
|
||||
fe->port_hi = f->dst->port_no >> 8;
|
||||
fe->port_no = dst->port_no;
|
||||
fe->port_hi = dst->port_no >> 8;
|
||||
|
||||
fe->is_local = test_bit(BR_FDB_LOCAL, &f->flags);
|
||||
if (!test_bit(BR_FDB_STATIC, &f->flags))
|
||||
@ -977,9 +983,11 @@ int br_fdb_dump(struct sk_buff *skb,
|
||||
|
||||
rcu_read_lock();
|
||||
hlist_for_each_entry_rcu(f, &br->fdb_list, fdb_node) {
|
||||
const struct net_bridge_port *dst = READ_ONCE(f->dst);
|
||||
|
||||
if (*idx < cb->args[2])
|
||||
goto skip;
|
||||
if (filter_dev && (!f->dst || f->dst->dev != filter_dev)) {
|
||||
if (filter_dev && (!dst || dst->dev != filter_dev)) {
|
||||
if (filter_dev != dev)
|
||||
goto skip;
|
||||
/* !f->dst is a special case for bridge
|
||||
@ -987,10 +995,10 @@ int br_fdb_dump(struct sk_buff *skb,
|
||||
* Therefore need a little more filtering
|
||||
* we only want to dump the !f->dst case
|
||||
*/
|
||||
if (f->dst)
|
||||
if (dst)
|
||||
goto skip;
|
||||
}
|
||||
if (!filter_dev && f->dst)
|
||||
if (!filter_dev && dst)
|
||||
goto skip;
|
||||
|
||||
err = fdb_fill_info(skb, br, f,
|
||||
|
||||
@ -4291,12 +4291,14 @@ struct sk_buff *skb_segment_list(struct sk_buff *skb,
|
||||
{
|
||||
struct sk_buff *list_skb = skb_shinfo(skb)->frag_list;
|
||||
unsigned int tnl_hlen = skb_tnl_header_len(skb);
|
||||
unsigned int delta_truesize = 0;
|
||||
unsigned int delta_len = 0;
|
||||
struct sk_buff *tail = NULL;
|
||||
struct sk_buff *nskb, *tmp;
|
||||
int len_diff, err;
|
||||
|
||||
/* Only skb_gro_receive_list generated skbs arrive here */
|
||||
DEBUG_NET_WARN_ON_ONCE(!(skb_shinfo(skb)->gso_type & SKB_GSO_FRAGLIST));
|
||||
|
||||
skb_push(skb, -skb_network_offset(skb) + offset);
|
||||
|
||||
/* Ensure the head is writeable before touching the shared info */
|
||||
@ -4310,8 +4312,9 @@ struct sk_buff *skb_segment_list(struct sk_buff *skb,
|
||||
nskb = list_skb;
|
||||
list_skb = list_skb->next;
|
||||
|
||||
DEBUG_NET_WARN_ON_ONCE(nskb->sk);
|
||||
|
||||
err = 0;
|
||||
delta_truesize += nskb->truesize;
|
||||
if (skb_shared(nskb)) {
|
||||
tmp = skb_clone(nskb, GFP_ATOMIC);
|
||||
if (tmp) {
|
||||
@ -4354,7 +4357,6 @@ struct sk_buff *skb_segment_list(struct sk_buff *skb,
|
||||
goto err_linearize;
|
||||
}
|
||||
|
||||
skb->truesize = skb->truesize - delta_truesize;
|
||||
skb->data_len = skb->data_len - delta_len;
|
||||
skb->len = skb->len - delta_len;
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user