Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 28 Nov 2019 01:17:40 +0000 (17:17 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 28 Nov 2019 01:17:40 +0000 (17:17 -0800)
Pull networking fixes from David Miller:
 "This is mostly to fix the iwlwifi regression:

  1) Flush GRO state properly in iwlwifi driver, from Alexander Lobakin.

  2) Validate TIPC link name with properly length macro, from John
     Rutherford.

  3) Fix completion init and device query timeouts in ibmvnic, from
     Thomas Falcon.

  4) Fix SKB size calculation for netlink messages in psample, from
     Nikolay Aleksandrov.

  5) Similar kind of fix for OVS flow dumps, from Paolo Abeni.

  6) Handle queue allocation failure unwind properly in gve driver, we
     could try to release pages we didn't allocate. From Jeroen de
     Borst.

  7) Serialize TX queue SKB list accesses properly in mscc ocelot
     driver. From Yangbo Lu"

* git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net:
  net: usb: aqc111: Use the correct style for SPDX License Identifier
  net: phy: Use the correct style for SPDX License Identifier
  net: wireless: intel: iwlwifi: fix GRO_NORMAL packet stalling
  net: mscc: ocelot: use skb queue instead of skbs list
  net: mscc: ocelot: avoid incorrect consuming in skbs list
  gve: Fix the queue page list allocated pages count
  net: inet_is_local_reserved_port() port arg should be unsigned short
  openvswitch: fix flow command message size
  net: phy: dp83869: Fix return paths to return proper values
  net: psample: fix skb_over_panic
  net: usbnet: Fix -Wcast-function-type
  net: hso: Fix -Wcast-function-type
  net: port < inet_prot_sock(net) --> inet_port_requires_bind_service(net, port)
  ibmvnic: Serialize device queries
  ibmvnic: Bound waits for device queries
  ibmvnic: Terminate waiting device threads after loss of service
  ibmvnic: Fix completion structure initialization
  net-sctp: replace some sock_net(sk) with just 'net'
  net: Fix a documentation bug wrt. ip_unprivileged_port_start
  tipc: fix link name length check

1  2 
security/selinux/hooks.c

diff --combined security/selinux/hooks.c
index 28eb05490d591982cb0d7e006bdd9a3e5c7e4e10,753b327f48067c3be23f8b5661c30b07c99e09a3..73986c1101b96dc0f382d01e7475a4df4f3216bc
@@@ -4623,8 -4623,8 +4623,8 @@@ static int selinux_socket_bind(struct s
  
                        inet_get_local_port_range(sock_net(sk), &low, &high);
  
-                       if (snum < max(inet_prot_sock(sock_net(sk)), low) ||
-                           snum > high) {
+                       if (inet_port_requires_bind_service(sock_net(sk), snum) ||
+                           snum < low || snum > high) {
                                err = sel_netport_sid(sk->sk_protocol,
                                                      snum, &sid);
                                if (err)
@@@ -6795,67 -6795,6 +6795,67 @@@ struct lsm_blob_sizes selinux_blob_size
        .lbs_msg_msg = sizeof(struct msg_security_struct),
  };
  
 +#ifdef CONFIG_PERF_EVENTS
 +static int selinux_perf_event_open(struct perf_event_attr *attr, int type)
 +{
 +      u32 requested, sid = current_sid();
 +
 +      if (type == PERF_SECURITY_OPEN)
 +              requested = PERF_EVENT__OPEN;
 +      else if (type == PERF_SECURITY_CPU)
 +              requested = PERF_EVENT__CPU;
 +      else if (type == PERF_SECURITY_KERNEL)
 +              requested = PERF_EVENT__KERNEL;
 +      else if (type == PERF_SECURITY_TRACEPOINT)
 +              requested = PERF_EVENT__TRACEPOINT;
 +      else
 +              return -EINVAL;
 +
 +      return avc_has_perm(&selinux_state, sid, sid, SECCLASS_PERF_EVENT,
 +                          requested, NULL);
 +}
 +
 +static int selinux_perf_event_alloc(struct perf_event *event)
 +{
 +      struct perf_event_security_struct *perfsec;
 +
 +      perfsec = kzalloc(sizeof(*perfsec), GFP_KERNEL);
 +      if (!perfsec)
 +              return -ENOMEM;
 +
 +      perfsec->sid = current_sid();
 +      event->security = perfsec;
 +
 +      return 0;
 +}
 +
 +static void selinux_perf_event_free(struct perf_event *event)
 +{
 +      struct perf_event_security_struct *perfsec = event->security;
 +
 +      event->security = NULL;
 +      kfree(perfsec);
 +}
 +
 +static int selinux_perf_event_read(struct perf_event *event)
 +{
 +      struct perf_event_security_struct *perfsec = event->security;
 +      u32 sid = current_sid();
 +
 +      return avc_has_perm(&selinux_state, sid, perfsec->sid,
 +                          SECCLASS_PERF_EVENT, PERF_EVENT__READ, NULL);
 +}
 +
 +static int selinux_perf_event_write(struct perf_event *event)
 +{
 +      struct perf_event_security_struct *perfsec = event->security;
 +      u32 sid = current_sid();
 +
 +      return avc_has_perm(&selinux_state, sid, perfsec->sid,
 +                          SECCLASS_PERF_EVENT, PERF_EVENT__WRITE, NULL);
 +}
 +#endif
 +
  static struct security_hook_list selinux_hooks[] __lsm_ro_after_init = {
        LSM_HOOK_INIT(binder_set_context_mgr, selinux_binder_set_context_mgr),
        LSM_HOOK_INIT(binder_transaction, selinux_binder_transaction),
        LSM_HOOK_INIT(bpf_map_free_security, selinux_bpf_map_free),
        LSM_HOOK_INIT(bpf_prog_free_security, selinux_bpf_prog_free),
  #endif
 +
 +#ifdef CONFIG_PERF_EVENTS
 +      LSM_HOOK_INIT(perf_event_open, selinux_perf_event_open),
 +      LSM_HOOK_INIT(perf_event_alloc, selinux_perf_event_alloc),
 +      LSM_HOOK_INIT(perf_event_free, selinux_perf_event_free),
 +      LSM_HOOK_INIT(perf_event_read, selinux_perf_event_read),
 +      LSM_HOOK_INIT(perf_event_write, selinux_perf_event_write),
 +#endif
  };
  
  static __init int selinux_init(void)