Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Pull networking fixes from David Miller: 1) The sockmap code has to free socket memory on close if there is corked data, from John Fastabend. 2) Tunnel names coming from userspace need to be length validated. From Eric Dumazet. 3) arp_filter() has to take VRFs properly into account, from Miguel Fadon Perlines. 4) Fix oops in error path of tcf_bpf_init(), from Davide Caratti. 5) Missing idr_remove() in u32_delete_key(), from Cong Wang. 6) More syzbot stuff. Several use of uninitialized value fixes all over, from Eric Dumazet. 7) Do not leak kernel memory to userspace in sctp, also from Eric Dumazet. 8) Discard frames from unused ports in DSA, from Andrew Lunn. 9) Fix DMA mapping and reset/failover problems in ibmvnic, from Thomas Falcon. 10) Do not access dp83640 PHY registers prematurely after reset, from Esben Haabendal. * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (46 commits) vhost-net: set packet weight of tx polling to 2 * vq size net: thunderx: rework mac addresses list to u64 array inetpeer: fix uninit-value in inet_getpeer dp83640: Ensure against premature access to PHY registers after reset devlink: convert occ_get op to separate registration ARM: dts: ls1021a: Specify TBIPA register address net/fsl_pq_mdio: Allow explicit speficition of TBIPA address ibmvnic: Do not reset CRQ for Mobility driver resets ibmvnic: Fix failover case for non-redundant configuration ibmvnic: Fix reset scheduler error handling ibmvnic: Zero used TX descriptor counter on reset ibmvnic: Fix DMA mapping mistakes tipc: use the right skb in tipc_sk_fill_sock_diag() sctp: sctp_sockaddr_af must check minimal addr length for AF_INET6 net: dsa: Discard frames from unused ports sctp: do not leak kernel memory to user space soreuseport: initialise timewait reuseport field ipv4: fix uninit-value in ip_route_output_key_hash_rcu() dccp: initialize ireq->ir_mark net: fix uninit-value in __hw_addr_add_ex() ...
This commit is contained in:
@@ -1027,7 +1027,7 @@ bool dev_valid_name(const char *name)
|
||||
{
|
||||
if (*name == '\0')
|
||||
return false;
|
||||
if (strlen(name) >= IFNAMSIZ)
|
||||
if (strnlen(name, IFNAMSIZ) == IFNAMSIZ)
|
||||
return false;
|
||||
if (!strcmp(name, ".") || !strcmp(name, ".."))
|
||||
return false;
|
||||
|
@@ -57,8 +57,8 @@ static int __hw_addr_add_ex(struct netdev_hw_addr_list *list,
|
||||
return -EINVAL;
|
||||
|
||||
list_for_each_entry(ha, &list->list, list) {
|
||||
if (!memcmp(ha->addr, addr, addr_len) &&
|
||||
ha->type == addr_type) {
|
||||
if (ha->type == addr_type &&
|
||||
!memcmp(ha->addr, addr, addr_len)) {
|
||||
if (global) {
|
||||
/* check if addr is already used as global */
|
||||
if (ha->global_use)
|
||||
|
@@ -2405,6 +2405,16 @@ devlink_resource_size_params_put(struct devlink_resource *resource,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int devlink_resource_occ_put(struct devlink_resource *resource,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
if (!resource->occ_get)
|
||||
return 0;
|
||||
return nla_put_u64_64bit(skb, DEVLINK_ATTR_RESOURCE_OCC,
|
||||
resource->occ_get(resource->occ_get_priv),
|
||||
DEVLINK_ATTR_PAD);
|
||||
}
|
||||
|
||||
static int devlink_resource_put(struct devlink *devlink, struct sk_buff *skb,
|
||||
struct devlink_resource *resource)
|
||||
{
|
||||
@@ -2425,11 +2435,8 @@ static int devlink_resource_put(struct devlink *devlink, struct sk_buff *skb,
|
||||
if (resource->size != resource->size_new)
|
||||
nla_put_u64_64bit(skb, DEVLINK_ATTR_RESOURCE_SIZE_NEW,
|
||||
resource->size_new, DEVLINK_ATTR_PAD);
|
||||
if (resource->resource_ops && resource->resource_ops->occ_get)
|
||||
if (nla_put_u64_64bit(skb, DEVLINK_ATTR_RESOURCE_OCC,
|
||||
resource->resource_ops->occ_get(devlink),
|
||||
DEVLINK_ATTR_PAD))
|
||||
goto nla_put_failure;
|
||||
if (devlink_resource_occ_put(resource, skb))
|
||||
goto nla_put_failure;
|
||||
if (devlink_resource_size_params_put(resource, skb))
|
||||
goto nla_put_failure;
|
||||
if (list_empty(&resource->resource_list))
|
||||
@@ -3162,15 +3169,13 @@ EXPORT_SYMBOL_GPL(devlink_dpipe_table_unregister);
|
||||
* @resource_id: resource's id
|
||||
* @parent_reosurce_id: resource's parent id
|
||||
* @size params: size parameters
|
||||
* @resource_ops: resource ops
|
||||
*/
|
||||
int devlink_resource_register(struct devlink *devlink,
|
||||
const char *resource_name,
|
||||
u64 resource_size,
|
||||
u64 resource_id,
|
||||
u64 parent_resource_id,
|
||||
const struct devlink_resource_size_params *size_params,
|
||||
const struct devlink_resource_ops *resource_ops)
|
||||
const struct devlink_resource_size_params *size_params)
|
||||
{
|
||||
struct devlink_resource *resource;
|
||||
struct list_head *resource_list;
|
||||
@@ -3213,7 +3218,6 @@ int devlink_resource_register(struct devlink *devlink,
|
||||
resource->size = resource_size;
|
||||
resource->size_new = resource_size;
|
||||
resource->id = resource_id;
|
||||
resource->resource_ops = resource_ops;
|
||||
resource->size_valid = true;
|
||||
memcpy(&resource->size_params, size_params,
|
||||
sizeof(resource->size_params));
|
||||
@@ -3315,6 +3319,58 @@ out:
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devlink_dpipe_table_resource_set);
|
||||
|
||||
/**
|
||||
* devlink_resource_occ_get_register - register occupancy getter
|
||||
*
|
||||
* @devlink: devlink
|
||||
* @resource_id: resource id
|
||||
* @occ_get: occupancy getter callback
|
||||
* @occ_get_priv: occupancy getter callback priv
|
||||
*/
|
||||
void devlink_resource_occ_get_register(struct devlink *devlink,
|
||||
u64 resource_id,
|
||||
devlink_resource_occ_get_t *occ_get,
|
||||
void *occ_get_priv)
|
||||
{
|
||||
struct devlink_resource *resource;
|
||||
|
||||
mutex_lock(&devlink->lock);
|
||||
resource = devlink_resource_find(devlink, NULL, resource_id);
|
||||
if (WARN_ON(!resource))
|
||||
goto out;
|
||||
WARN_ON(resource->occ_get);
|
||||
|
||||
resource->occ_get = occ_get;
|
||||
resource->occ_get_priv = occ_get_priv;
|
||||
out:
|
||||
mutex_unlock(&devlink->lock);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devlink_resource_occ_get_register);
|
||||
|
||||
/**
|
||||
* devlink_resource_occ_get_unregister - unregister occupancy getter
|
||||
*
|
||||
* @devlink: devlink
|
||||
* @resource_id: resource id
|
||||
*/
|
||||
void devlink_resource_occ_get_unregister(struct devlink *devlink,
|
||||
u64 resource_id)
|
||||
{
|
||||
struct devlink_resource *resource;
|
||||
|
||||
mutex_lock(&devlink->lock);
|
||||
resource = devlink_resource_find(devlink, NULL, resource_id);
|
||||
if (WARN_ON(!resource))
|
||||
goto out;
|
||||
WARN_ON(!resource->occ_get);
|
||||
|
||||
resource->occ_get = NULL;
|
||||
resource->occ_get_priv = NULL;
|
||||
out:
|
||||
mutex_unlock(&devlink->lock);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devlink_resource_occ_get_unregister);
|
||||
|
||||
static int __init devlink_module_init(void)
|
||||
{
|
||||
return genl_register_family(&devlink_nl_family);
|
||||
|
@@ -857,6 +857,7 @@ static struct sk_buff *__skb_clone(struct sk_buff *n, struct sk_buff *skb)
|
||||
n->hdr_len = skb->nohdr ? skb_headroom(skb) : skb->hdr_len;
|
||||
n->cloned = 1;
|
||||
n->nohdr = 0;
|
||||
n->peeked = 0;
|
||||
n->destructor = NULL;
|
||||
C(tail);
|
||||
C(end);
|
||||
|
Reference in New Issue
Block a user