Commit graph

691,473 commits

Author SHA1 Message Date
Marcelo Ricardo Leitner
fb586f2530 sctp: delay calls to sk_data_ready() as much as possible
Currently processing of multiple chunks in a single SCTP packet leads to
multiple calls to sk_data_ready, causing multiple wake up signals which
are costy and doesn't make it wake up any faster.

With this patch it will note that the wake up is pending and will do it
before leaving the state machine interpreter, latest place possible to
do it realiably and cleanly.

Note that sk_data_ready events are not dependent on asocs, unlike waking
up writers.

v2: series re-checked
v3: use local vars to cleanup the code, suggested by Jakub Sitnicki
Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-04-13 23:04:44 -04:00
Marcelo Ricardo Leitner
250eb1f881 sctp: compress bit-wide flags to a bitfield on sctp_sock
It wastes space and gets worse as we add new flags, so convert bit-wide
flags to a bitfield.

Currently it already saves 4 bytes in sctp_sock, which are left as holes
in it for now. The whole struct needs packing, which should be done in
another patch.

Note that do_auto_asconf cannot be merged, as explained in the comment
before it.

Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Acked-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-04-13 23:04:44 -04:00
Emrah Demir
b821646826 mISDN: Fixing missing validation in base_sock_bind()
Add validation code into mISDN/socket.c

Signed-off-by: Emrah Demir <ed@abdsec.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-04-13 23:00:50 -04:00
Alexander Duyck
3f3f7cb875 i40e/i40evf: Limit TSO to 7 descriptors for payload instead of 8 per packet
This patch addresses a bug introduced based on my interpretation of the
XL710 datasheet.  Specifically section 8.4.1 states that "A single transmit
packet may span up to 8 buffers (up to 8 data descriptors per packet
including both the header and payload buffers)."  It then later goes on to
say that each segment for a TSO obeys the previous rule, however it then
refers to TSO header and the segment payload buffers.

I believe the actual limit for fragments with TSO and a skbuff that has
payload data in the header portion of the buffer is actually only 7
fragments as the skb->data portion counts as 2 buffers, one for the TSO
header, and one for a segment payload buffer.

Fixes: 2d37490b82 ("i40e/i40evf: Rewrite logic for 8 descriptor per packet check")
Reported-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>
Signed-off-by: Alexander Duyck <aduyck@mirantis.com>
Acked-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Tested-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
2016-04-13 19:59:23 -07:00
David Ahern
70af921db6 net: ipv6: Do not keep linklocal and loopback addresses
f1705ec197 added the option to retain user configured addresses on an
admin down. A comment to one of the later revisions suggested using the
IFA_F_PERMANENT flag rather than adding a user_managed boolean to the
ifaddr struct. A side effect of this change is that link local and
loopback addresses are also retained which is not part of the objective
of f1705ec197. Add check to drop those addresses.

Fixes: f1705ec197 ("net: ipv6: Make address flushing on ifdown optional")
Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-04-13 22:58:37 -04:00
Denys Vlasenko
ea019649c3 drivers/net/ethernet/jme.c: Deinline jme_reset_mac_processor, save 2816 bytes
This function compiles to 895 bytes of machine code.

Clearly, this isn't a time-critical function.
For one, it has a number of udelay(1) calls.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
CC: David S. Miller <davem@davemloft.net>
CC: linux-kernel@vger.kernel.org
CC: netdev@vger.kernel.org
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-04-13 22:57:00 -04:00
David S. Miller
079adf6c53 Merge branch 'bridge-sysfs-rtnl-notifications'
Xin Long says:

====================
bridge: support sending rntl info when we set attributes through sysfs/ioctl

This patchset is used to support sending rntl info to user in some places,
and ensure that whenever those attributes change internally or from sysfs,
that a netlink notification is sent out to listeners.

It also make some adjustment in bridge sysfs so that we can implement this
easily.

I've done some tests on this patchset, like:
[br_sysfs]
  1. change all the attribute values of br or brif:
  $ echo $value > /sys/class/net/br0/bridge/{*}
  $ echo $value > /sys/class/net/br0/brif/eth1/{*}

  2. meanwhile, on another terminal to observe the msg:
  $ bridge monitor

[br_ioctl]
  1. in bridge-utils package, do some changes in br_set, let brctl command
  use ioctl to set attribute:
         if ((ret = set_sysfs(path, value)) < 0) { -->
         if (1) {

  $ brctl set*

  2. meanwhile, on another terminal to observe the msg:
  $ bridge monitor

This test covers all the attributes that brctl and sysfs support to set.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>
2016-04-13 22:42:33 -04:00
Xin Long
bf871ad792 bridge: a netlink notification should be sent when those attributes are changed by ioctl
Now when we change the attributes of bridge or br_port by netlink,
a relevant netlink notification will be sent, but if we change them
by ioctl or sysfs, no notification will be sent.

We should ensure that whenever those attributes change internally or from
sysfs/ioctl, that a netlink notification is sent out to listeners.

Also, NetworkManager will use this in the future to listen for out-of-band
bridge master attribute updates and incorporate them into the runtime
configuration.

This patch is used for ioctl.

Signed-off-by: Xin Long <lucien.xin@gmail.com>
Reviewed-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-04-13 22:42:33 -04:00
Xin Long
bdaf0d5d98 bridge: a netlink notification should be sent when those attributes are changed by br_sysfs_if
Now when we change the attributes of bridge or br_port by netlink,
a relevant netlink notification will be sent, but if we change them
by ioctl or sysfs, no notification will be sent.

We should ensure that whenever those attributes change internally or from
sysfs/ioctl, that a netlink notification is sent out to listeners.

Also, NetworkManager will use this in the future to listen for out-of-band
bridge master attribute updates and incorporate them into the runtime
configuration.

This patch is used for br_sysfs_if, and we also move br_ifinfo_notify out
of store_flag.

Signed-off-by: Xin Long <lucien.xin@gmail.com>
Reviewed-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-04-13 22:42:33 -04:00
Xin Long
047831a9b9 bridge: a netlink notification should be sent when those attributes are changed by br_sysfs_br
Now when we change the attributes of bridge or br_port by netlink,
a relevant netlink notification will be sent, but if we change them
by ioctl or sysfs, no notification will be sent.

We should ensure that whenever those attributes change internally or from
sysfs/ioctl, that a netlink notification is sent out to listeners.

Also, NetworkManager will use this in the future to listen for out-of-band
bridge master attribute updates and incorporate them into the runtime
configuration.

This patch is used for br_sysfs_br. and we also need to remove some
rtnl_trylock in old functions so that we can call it in a common one.

For group_addr_store, we cannot make it use store_bridge_parm, because
it's not a string-to-long convert, we will add notification on it
individually.

Signed-off-by: Xin Long <lucien.xin@gmail.com>
Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-04-13 22:42:33 -04:00
Xin Long
4436156b6f bridge: simplify the stp_state_store by calling store_bridge_parm
There are some repetitive codes in stp_state_store, we can remove
them by calling store_bridge_parm.

Signed-off-by: Xin Long <lucien.xin@gmail.com>
Reviewed-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-04-13 22:42:32 -04:00
Xin Long
347db6b49e bridge: simplify the forward_delay_store by calling store_bridge_parm
There are some repetitive codes in forward_delay_store, we can remove
them by calling store_bridge_parm.

Signed-off-by: Xin Long <lucien.xin@gmail.com>
Reviewed-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-04-13 22:42:32 -04:00
Xin Long
14f31bb39f bridge: simplify the flush_store by calling store_bridge_parm
There are some repetitive codes in flush_store, we can remove
them by calling store_bridge_parm, also, it would send rtnl notification
after we add it in store_bridge_parm in the following patches.

Signed-off-by: Xin Long <lucien.xin@gmail.com>
Reviewed-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-04-13 22:42:32 -04:00
Denys Vlasenko
f9a7cbbf18 net: force inlining of netif_tx_start/stop_queue, sock_hold, __sock_put
Sometimes gcc mysteriously doesn't inline
very small functions we expect to be inlined. See
    https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66122
Arguably, gcc should do better, but gcc people aren't willing
to invest time into it, asking to use __always_inline instead.

With this .config:
http://busybox.net/~vda/kernel_config_OPTIMIZE_INLINING_and_Os,
the following functions get deinlined many times.

netif_tx_stop_queue: 207 copies, 590 calls:
	55                      push   %rbp
	48 89 e5                mov    %rsp,%rbp
	f0 80 8f e0 01 00 00 01 lock orb $0x1,0x1e0(%rdi)
	5d                      pop    %rbp
	c3                      retq

netif_tx_start_queue: 47 copies, 111 calls
	55                      push   %rbp
	48 89 e5                mov    %rsp,%rbp
	f0 80 a7 e0 01 00 00 fe lock andb $0xfe,0x1e0(%rdi)
	5d                      pop    %rbp
	c3                      retq

sock_hold: 39 copies, 124 calls
	55                      push   %rbp
	48 89 e5                mov    %rsp,%rbp
	f0 ff 87 80 00 00 00    lock incl 0x80(%rdi)
	5d                      pop    %rbp
	c3                      retq

__sock_put: 6 copies, 13 calls
	55                      push   %rbp
	48 89 e5                mov    %rsp,%rbp
	f0 ff 8f 80 00 00 00    lock decl 0x80(%rdi)
	5d                      pop    %rbp
	c3                      retq

This patch fixes this via s/inline/__always_inline/.

Code size decrease after the patch is ~2.5k:

    text      data      bss       dec     hex filename
56719876  56364551 36196352 149280779 8e5d80b vmlinux_before
56717440  56364551 36196352 149278343 8e5ce87 vmlinux

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
CC: David S. Miller <davem@davemloft.net>
CC: linux-kernel@vger.kernel.org
CC: netdev@vger.kernel.org
CC: netfilter-devel@vger.kernel.org
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-04-13 22:40:54 -04:00
Masanari Iida
bf91795e4a Doc: networking: Fix typo in dsa
This patch fix typos in Documentation/networking/dsa.

Signed-off-by: Masanari Iida <standby24x7@gmail.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-04-13 22:38:56 -04:00
Daniel Borkmann
47e27d5e92 ipv6, token: allow for clearing the current device token
The original tokenized iid support implemented via f53adae4ea ("net: ipv6:
add tokenized interface identifier support") didn't allow for clearing a
device token as it was intended that this addressing mode was the only one
active for globally scoped IPv6 addresses. Later we relaxed that restriction
via 617fe29d45 ("net: ipv6: only invalidate previously tokenized addresses"),
and we should also allow for clearing tokens as there's no good reason why
it shouldn't be allowed.

Fixes: 617fe29d45 ("net: ipv6: only invalidate previously tokenized addresses")
Reported-by: Robin H. Johnson <robbat2@gentoo.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Cc: Hannes Frederic Sowa <hannes@stressinduktion.org>
Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-04-13 22:38:14 -04:00
Hannes Frederic Sowa
fafc4e1ea1 sock: tigthen lockdep checks for sock_owned_by_user
sock_owned_by_user should not be used without socket lock held. It seems
to be a common practice to check .owned before lock reclassification, so
provide a little help to abstract this check away.

Cc: linux-cifs@vger.kernel.org
Cc: linux-bluetooth@vger.kernel.org
Cc: linux-nfs@vger.kernel.org
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-04-13 22:37:20 -04:00
Wolfram Sang
a6d37131c0 net: ethernet: renesas: ravb_main: test clock rate to avoid division by 0
The clk API may return 0 on clk_get_rate, so we should check the result before
using it as a divisor.

Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Acked-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-04-13 22:36:28 -04:00
Alexandre TORGUE
18b46810eb net: ethernet: stmmac: GMAC4.xx: Fix TX descriptor preparation
On GMAC4.xx each descriptor contains 2 buffers of 16KB (each).
Initially, those 2 buffers was filled in dwmac4_rd_prepare_tx_desc but
it is actually not needed. Indeed, stmmac driver supports frame up to
9000 bytes (jumbo). So only one buffer is needed.

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Alexandre TORGUE <alexandre.torgue@st.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-04-13 22:35:17 -04:00
David S. Miller
fbf405e80c Merge branch 'udp-hdrs-fixes'
Willem de Bruijn says:

====================
fix two more udp pull header issues

Follow up patches to the fixes to RxRPC and SunRPC. A scan of the
code showed two other interfaces that expect UDP packets to have
a udphdr when queued: read packet length with ioctl SIOCINQ and
receive payload checksum with socket option IP_CHECKSUM.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>
2016-04-13 22:24:52 -04:00
Willem de Bruijn
31c2e4926f udp: do not expect udp headers in recv cmsg IP_CMSG_CHECKSUM
On udp sockets, recv cmsg IP_CMSG_CHECKSUM returns a checksum over
the packet payload. Since commit e6afc8ace6 pulled the headers,
taking skb->data as the start of transport header is incorrect. Use
the transport header pointer.

Also, when peeking at an offset from the start of the packet, only
return a checksum from the start of the peeked data. Note that the
cmsg does not subtract a tail checkum when reading truncated data.

Fixes: e6afc8ace6 ("udp: remove headers from UDP packets before queueing")

Signed-off-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-04-13 22:24:52 -04:00
Willem de Bruijn
9f9a45beaa udp: do not expect udp headers on ioctl SIOCINQ
On udp sockets, ioctl SIOCINQ returns the payload size of the first
packet. Since commit e6afc8ace6 pulled the headers, the result is
incorrect when subtracting header length. Remove that operation.

Fixes: e6afc8ace6 ("udp: remove headers from UDP packets before queueing")

Signed-off-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-04-13 22:24:52 -04:00
David S. Miller
60e19518d6 Merge git://git.kernel.org/pub/scm/linux/kernel/git/pablo/nf
Pablo Neira Ayuso says:

====================
Netfilter fixes for net

The following patchset contains Netfilter fixes for your net tree. More
specifically, they are:

1) Fix missing filter table per-netns registration in arptables, from
   Florian Westphal.

2) Resolve out of bound access when parsing TCP options in
   nf_conntrack_tcp, patch from Jozsef Kadlecsik.

3) Prefer NFPROTO_BRIDGE extensions over NFPROTO_UNSPEC in ebtables,
   this resolves conflict between xt_limit and ebt_limit, from Phil Sutter.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>
2016-04-13 21:49:03 -04:00
Olof Johansson
c323061e42 Highlights:
-----------
  - Add CPUFreq and RProc drivers to STI maintainers file list
  - Improve STi's menuconfig help entry
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJXB6gyAAoJEMo4jShGhw+JtfoP/0iFuyXeWiETyasoyKUMMvkj
 qecrpF+mP2aPq4deQqSYzHmgILA/O4Bxgtb5h6qd0BN5CiGZcvU5byhXiX4sNRpS
 anvDxGaVyrfUOrRctO6JzyCKbRLZEUWjUkBbPIvDy5OZCM2kJDzZ/XJ3Phg3cBrM
 dSaUqIuAnIeW9Dyg9NusyvV6PoIUZ048Q+Kv6Hf82/FUkb/33e1ezjwz6IHtKvTR
 o9dsVuIzll5C68UNM22/Hi4S0UxqioPovWfCCLsldOMCjGjVb9s+W7OSYCWEMgeq
 xg5W6jtVJalRh94VrrVD4C0vgXHAGJgf5y11XzN0C7X+S2LVc8Rr1/gV3+dKvfQM
 6sbGKgTssm1xSpzWOzt1B0BhfIKK9ln/vnvwc8w0u8z8EbMUI1jOwKBBUr8LnxQg
 TgGYAJ8hFCk/4WL1xJjI6znD0v5JSKFGe5S6qRpgNT4dxcVDZue90xjdWJgjBJZy
 h5e7zEYH135/P0scseUbAtciOvL0eBfkRyPFwukYEVastRAN8XkUv/ue7FeO3PP/
 HrnvV9WwaH3YbDFTVRtPICFYEKdLKOE2cbeeLUTbCIQ0KhJ9J/YNMqkaaVxiybcO
 SkhGMxsPBgB0gTCi29791x/a8hi4pnpRr8MafMQyBZIU2/RmMoLWKEXn7wLesA5Y
 kL1RRnY4hIqOGyv5U3l/
 =3cmL
 -----END PGP SIGNATURE-----

Merge tag 'sti-soc-for-v4.7-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mcoquelin/sti into next/soc

Highlights:
-----------
 - Add CPUFreq and RProc drivers to STI maintainers file list
 - Improve STi's menuconfig help entry

* tag 'sti-soc-for-v4.7-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mcoquelin/sti:
  ARM: STi: Update platform level menuconfig 'help'
  MAINTAINERS: Add ST's Remote Processor Driver to ARM/STI ARCHITECTURE
  MAINTAINERS: Add ST's CPUFreq driver to the STI file list

Signed-off-by: Olof Johansson <olof@lixom.net>
2016-04-13 15:44:59 -07:00
Olof Johansson
7d7bca889f Highlights:
-----------
  - Enable ST's HW Random number generator in multi_v7 defconfig
  - Enable PWM regulator support in multi_v7 defconfig
  - Enable ST's Power and Reset driver in multi_v7 defconfig
  - Enable ST's PWM in multi_v7 defconfig
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJXB5rtAAoJEMo4jShGhw+J90cQAMWukGB9Hee2Y2y/roZZNuR9
 XEa0/oQ/b1Sp8WjcNKLuXR5JxD0dt/0c9Hog0riK4jH58b50m4/ZEOLQ7ElWzMnd
 BdYD6Ipkm0Ot5VEReAyU7bmCDzFWLyZBWtCuwslerFSYVC/IiHAMMeijnxE7RShm
 UiuDHQwvvRdkiJX5VAzUqeVG3Sfd24fbnV91nu6otPAgfbv1+wBIqEEmHJJ+aMdA
 PLiQzgVhFzAzrZzc0KkdUPG5o1wEvSmHQ+NCGHwH4UMpdX6U5fqoJ5HIIV5mUpwr
 ho7I6VCDj7DYATsKa//QiciWzVGsAaaVVjS0WOJ9WJfXkWStzvPGj8nzuCnJtmrZ
 JKg3aifgwBxxTWZ+snjBxA5wSW0aJUWGwMOP4lkU1wUqSpgFYT4/khOYZLVh8jkl
 u3y8U4BZrY/sfTPuBKH37cd2LVOdndKp9kJdzwG30cIfY2DZ6tD1vnTKK3b6mcoo
 RzYsoNCqtgfODtD/ThQmH5YwpG1jegzvuP6Ef36a1HhKeXpIvP2Vt4DUeCIQQN2N
 BFD8HLfQlxxHNPJH6tUioR61BgYnd7Z7CifVSlDqF2iX86XlpthEVLZhyAksYjwc
 t6OEULrwe7vuk7sMrqVrZOCNUkQtPLIc3puqP9Bia+EajgBibCOkOkuPaSUhvtC6
 HsTzavpiE+420tuJGTZL
 =OJtH
 -----END PGP SIGNATURE-----

Merge tag 'sti-defconfig-for-v4.7-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mcoquelin/sti into next/defconfig

Highlights:
-----------
 - Enable ST's HW Random number generator in multi_v7 defconfig
 - Enable PWM regulator support in multi_v7 defconfig
 - Enable ST's Power and Reset driver in multi_v7 defconfig
 - Enable ST's PWM in multi_v7 defconfig

* tag 'sti-defconfig-for-v4.7-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mcoquelin/sti:
  ARM: multi_v7_defconfig: Enable ST's HW Random Number Generator
  ARM: multi_v7_defconfig: Enable support for PWM Regulators
  ARM: multi_v7_defconfig: Enable ST's Power Reset driver
  ARM: multi_v7_defconfig: Enable ST's PWM driver

Signed-off-by: Olof Johansson <olof@lixom.net>
2016-04-13 15:43:50 -07:00
Pablo Neira Ayuso
4054ff4545 netfilter: ctnetlink: remove unnecessary inlining
Many of these functions are called from control plane path.  Move
ctnetlink_nlmsg_size() under CONFIG_NF_CONNTRACK_EVENTS to avoid a
compilation warning when CONFIG_NF_CONNTRACK_EVENTS=n.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2016-04-14 00:39:34 +02:00
Florian Westphal
d7591f0c41 netfilter: x_tables: introduce and use xt_copy_counters_from_user
The three variants use same copy&pasted code, condense this into a
helper and use that.

Make sure info.name is 0-terminated.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2016-04-14 00:30:41 +02:00
Florian Westphal
aded9f3e9f netfilter: x_tables: remove obsolete check
Since 'netfilter: x_tables: validate targets of jumps' change we
validate that the target aligns exactly with beginning of a rule,
so offset test is now redundant.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2016-04-14 00:30:41 +02:00
Florian Westphal
95609155d7 netfilter: x_tables: remove obsolete overflow check for compat case too
commit 9e67d5a739
("[NETFILTER]: x_tables: remove obsolete overflow check") left the
compat parts alone, but we can kill it there as well.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2016-04-14 00:30:40 +02:00
Florian Westphal
09d9686047 netfilter: x_tables: do compat validation via translate_table
This looks like refactoring, but its also a bug fix.

Problem is that the compat path (32bit iptables, 64bit kernel) lacks a few
sanity tests that are done in the normal path.

For example, we do not check for underflows and the base chain policies.

While its possible to also add such checks to the compat path, its more
copy&pastry, for instance we cannot reuse check_underflow() helper as
e->target_offset differs in the compat case.

Other problem is that it makes auditing for validation errors harder; two
places need to be checked and kept in sync.

At a high level 32 bit compat works like this:
1- initial pass over blob:
   validate match/entry offsets, bounds checking
   lookup all matches and targets
   do bookkeeping wrt. size delta of 32/64bit structures
   assign match/target.u.kernel pointer (points at kernel
   implementation, needed to access ->compatsize etc.)

2- allocate memory according to the total bookkeeping size to
   contain the translated ruleset

3- second pass over original blob:
   for each entry, copy the 32bit representation to the newly allocated
   memory.  This also does any special match translations (e.g.
   adjust 32bit to 64bit longs, etc).

4- check if ruleset is free of loops (chase all jumps)

5-first pass over translated blob:
   call the checkentry function of all matches and targets.

The alternative implemented by this patch is to drop steps 3&4 from the
compat process, the translation is changed into an intermediate step
rather than a full 1:1 translate_table replacement.

In the 2nd pass (step #3), change the 64bit ruleset back to a kernel
representation, i.e. put() the kernel pointer and restore ->u.user.name .

This gets us a 64bit ruleset that is in the format generated by a 64bit
iptables userspace -- we can then use translate_table() to get the
'native' sanity checks.

This has two drawbacks:

1. we re-validate all the match and target entry structure sizes even
though compat translation is supposed to never generate bogus offsets.
2. we put and then re-lookup each match and target.

THe upside is that we get all sanity tests and ruleset validations
provided by the normal path and can remove some duplicated compat code.

iptables-restore time of autogenerated ruleset with 300k chains of form
-A CHAIN0001 -m limit --limit 1/s -j CHAIN0002
-A CHAIN0002 -m limit --limit 1/s -j CHAIN0003

shows no noticeable differences in restore times:
old:   0m30.796s
new:   0m31.521s
64bit: 0m25.674s

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2016-04-14 00:30:40 +02:00
Florian Westphal
0188346f21 netfilter: x_tables: xt_compat_match_from_user doesn't need a retval
Always returned 0.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2016-04-14 00:30:40 +02:00
Florian Westphal
8dddd32756 netfilter: arp_tables: simplify translate_compat_table args
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2016-04-14 00:30:39 +02:00
Florian Westphal
329a080712 netfilter: ip6_tables: simplify translate_compat_table args
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2016-04-14 00:30:39 +02:00
Florian Westphal
7d3f843eed netfilter: ip_tables: simplify translate_compat_table args
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2016-04-14 00:30:38 +02:00
Florian Westphal
13631bfc60 netfilter: x_tables: validate all offsets and sizes in a rule
Validate that all matches (if any) add up to the beginning of
the target and that each match covers at least the base structure size.

The compat path should be able to safely re-use the function
as the structures only differ in alignment; added a
BUILD_BUG_ON just in case we have an arch that adds padding as well.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2016-04-14 00:30:38 +02:00
Florian Westphal
ce683e5f9d netfilter: x_tables: check for bogus target offset
We're currently asserting that targetoff + targetsize <= nextoff.

Extend it to also check that targetoff is >= sizeof(xt_entry).
Since this is generic code, add an argument pointing to the start of the
match/target, we can then derive the base structure size from the delta.

We also need the e->elems pointer in a followup change to validate matches.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2016-04-14 00:30:37 +02:00
Florian Westphal
7ed2abddd2 netfilter: x_tables: check standard target size too
We have targets and standard targets -- the latter carries a verdict.

The ip/ip6tables validation functions will access t->verdict for the
standard targets to fetch the jump offset or verdict for chainloop
detection, but this happens before the targets get checked/validated.

Thus we also need to check for verdict presence here, else t->verdict
can point right after a blob.

Spotted with UBSAN while testing malformed blobs.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2016-04-14 00:30:37 +02:00
Florian Westphal
fc1221b3a1 netfilter: x_tables: add compat version of xt_check_entry_offsets
32bit rulesets have different layout and alignment requirements, so once
more integrity checks get added to xt_check_entry_offsets it will reject
well-formed 32bit rulesets.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2016-04-14 00:30:36 +02:00
Florian Westphal
a08e4e190b netfilter: x_tables: assert minimum target size
The target size includes the size of the xt_entry_target struct.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2016-04-14 00:30:36 +02:00
Florian Westphal
aa412ba225 netfilter: x_tables: kill check_entry helper
Once we add more sanity testing to xt_check_entry_offsets it
becomes relvant if we're expecting a 32bit 'config_compat' blob
or a normal one.

Since we already have a lot of similar-named functions (check_entry,
compat_check_entry, find_and_check_entry, etc.) and the current
incarnation is short just fold its contents into the callers.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2016-04-14 00:30:36 +02:00
Florian Westphal
7d35812c32 netfilter: x_tables: add and use xt_check_entry_offsets
Currently arp/ip and ip6tables each implement a short helper to check that
the target offset is large enough to hold one xt_entry_target struct and
that t->u.target_size fits within the current rule.

Unfortunately these checks are not sufficient.

To avoid adding new tests to all of ip/ip6/arptables move the current
checks into a helper, then extend this helper in followup patches.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2016-04-14 00:30:35 +02:00
Florian Westphal
3647234101 netfilter: x_tables: validate targets of jumps
When we see a jump also check that the offset gets us to beginning of
a rule (an ipt_entry).

The extra overhead is negible, even with absurd cases.

300k custom rules, 300k jumps to 'next' user chain:
[ plus one jump from INPUT to first userchain ]:

Before:
real    0m24.874s
user    0m7.532s
sys     0m16.076s

After:
real    0m27.464s
user    0m7.436s
sys     0m18.840s

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2016-04-14 00:30:35 +02:00
Florian Westphal
f24e230d25 netfilter: x_tables: don't move to non-existent next rule
Ben Hawkes says:

 In the mark_source_chains function (net/ipv4/netfilter/ip_tables.c) it
 is possible for a user-supplied ipt_entry structure to have a large
 next_offset field. This field is not bounds checked prior to writing a
 counter value at the supplied offset.

Base chains enforce absolute verdict.

User defined chains are supposed to end with an unconditional return,
xtables userspace adds them automatically.

But if such return is missing we will move to non-existent next rule.

Reported-by: Ben Hawkes <hawkes@google.com>
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
2016-04-14 00:30:34 +02:00
Olof Johansson
e24f89e37b This contains the rk3368-geekbox as new board, mailbox device
nodes for the core rk3368 and some cleanups for gpio-keys,
 mmc and tsadc.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQEcBAABCAAGBQJXDIe4AAoJEPOmecmc0R2B3acH/3U9VHCGVy7w5RNl/UISe6Eu
 og7QZyy8r8dNw+bk9EX8x9AyqkN4bHAfAqg+Pc+JvxOeqmTjxFqPqZKWjEUQ8BOw
 SPsJE0ZeRRYAvp1OYfR1ATGwRQDvJq+DaKtb9d8S6ZdYdwXWR/JhkXiCxpQGEqAO
 TV82csxc86T+F+GJN63uk0UVfnZhzFtCJ6zSWBVyEpiUYxeQwTSkxjVUUJagOJLT
 Wb/0qgD2b8L1Xs8Flj0zVwAsvNIBKlxsaXzhN9EBD9pnHDQJ1l2cU2EdsQtWCwlE
 9ic2kwYFlgTrCAo1FITWFgyUTFLnuGcrfn2QIBIWK1X6TBJuYauGzslJEE96luw=
 =zT4u
 -----END PGP SIGNATURE-----

Merge tag 'v4.7-rockchip-dts64-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip into next/dt64

This contains the rk3368-geekbox as new board, mailbox device
nodes for the core rk3368 and some cleanups for gpio-keys,
mmc and tsadc.

* tag 'v4.7-rockchip-dts64-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip:
  Documentation: devicetree: rockchip: Document rk3368-GeekBox
  arm64: dts: rockchip: Add rk3368 GeekBox dts
  arm64: dts: rockchip: Clean up gpio-keys nodes
  dt-bindings: Add vendor prefix for GeekBuying.com
  arm64: dts: rockchip: Add rk3368 mailbox device nodes
  arm64: dts: rockchip: remove broken-cd from emmc and sdio
  arm64: dts: rockchip: fix the incorrect otp-out pin on rk3368

Signed-off-by: Olof Johansson <olof@lixom.net>
2016-04-13 15:30:20 -07:00
Olof Johansson
8bd641ff01 A lot display-controller nodes for DSI and the Analogix DP on rk3288
as well as general display+hdmi support on rk3036. With the Analogix
 DP support, Veyron Chromeboks can now finally use their internal
 display.
 
 Other than this big improvement we have thermal support on the rk3228,
 a long time missing binding document for the General Register Files
 block, better operating points for Veyron devices and a bunch of fixes
 with parts stemming from warnings that new dtc version can generate.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQEcBAABCAAGBQJXDI8tAAoJEPOmecmc0R2BwksIAK/l/K03RwWzT20pc9UZIBPL
 YevlAXKFa7io9Wju0gfGJOQNo+UAUQh6Rhcuf/J3odiDl2URoHqu1xIR+KOKWZrO
 aD72VorCOcrPYck3BTyTLCtfG+zr8Q3t/i5f3ghitK5XdnW2MtE6SIjZ5x8Md+M8
 6D4svbgLIh16/kq1XzjcQkf5c7sf7xSABhZEE8Xb7CuPmeBe/j6ORMMuUqIA0rJi
 ZbW0+MyAiuAYD7vyQm/IiPk9nw12nnD+zjVg3Nz3YwmXYb4cNQfHdCJbjxezbw80
 R96VS4OdAlOZocETi5GljC97fdAtTSBJXOogeK1/pXQfbQFlkWeDYzsF9l/oJYI=
 =+WKk
 -----END PGP SIGNATURE-----

Merge tag 'v4.7-rockchip-dts32-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip into next/dt

A lot display-controller nodes for DSI and the Analogix DP on rk3288
as well as general display+hdmi support on rk3036. With the Analogix
DP support, Veyron Chromeboks can now finally use their internal
display.

Other than this big improvement we have thermal support on the rk3228,
a long time missing binding document for the General Register Files
block, better operating points for Veyron devices and a bunch of fixes
with parts stemming from warnings that new dtc version can generate.

* tag 'v4.7-rockchip-dts32-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip: (27 commits)
  ARM: dts: rockchip: move rk3036 memory definition to board files
  ARM: dts: rockchip: enable the eDP on rk3288 veyron devices
  ARM: dts: rockchip: simple panel and backlight supplies on veyron boards
  ARM: dts: rockchip: override edp hpd handling on veyron-pinky and speedy
  ARM: dts: rockchip: add rk3288-veyron-minnie backlight and panel settings
  ARM: dts: rockchip: add rk3288-veyron-jaq backlight and panel overrides
  ARM: dts: rockchip: add core rk3288-veyron backlight and panel nodes
  ARM: dts: rockchip: add startup delay to rk3288-veyron panel-regulators
  ARM: dts: rockchip: move edp-hpd pin definition into common location
  ARM: dts: rockchip: add rk3288 displayport controller node
  ARM: dts: rockchip: add rk3288 edp-phy node
  ARM: dts: rockchip: add missing unitname to cpu_leakage efuse
  ARM: dts: rockchip: drop unneeded properties from mipi node
  ARM: dts: rockchip: clean up gpio-keys nodes
  ARM: dts: rockchip: fix missing usbphy unit-names
  ARM: dts: rockchip: fix rk3288 power-domain unit names
  ARM: dts: rockchip: update rk3288-veyron cpu operating points
  ARM: dts: rockchip: remove broken-cd from emmc and sdio
  ARM: dts: rockchip: enable the tsadc for rk3228 evb
  ARM: dts: rockchip: add the thermal main info found on rk3228
  ...

Signed-off-by: Olof Johansson <olof@lixom.net>
2016-04-13 15:27:33 -07:00
Olof Johansson
f8433ac982 Fix for a sparse build warning in the smp code.
-----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQEcBAABCAAGBQJXDINRAAoJEPOmecmc0R2BGXIIAKFbEmHm7Q9iG64Lm8fUIByz
 YjdVmXNuuCo8zZO0LH4PDwv6CGAQ1zLl2fUVQTlMXeV53rRfbCUi94MCs6eih34+
 pZQet8fNZuUWT89+ZRikL5qD+GvNLkdxXWjBjAZ0PgRxbrU+Rv7d0qoxiYecL3m4
 BhSTQ7R4zVVP5wH5ge02IJUUPW0Yu29NRUijsmLXSMJy5Ai9fPdyid+JoBCVHuFG
 ns5LkbhhmPgCNqCGrUE4iSuBKJq1ttsjCwL5RZW8zblO/aPUOIdBNXHiG/ZQfyDd
 ozIEfJfCrQ+WjuD3j3J4ppYKJLXf79b/6xO3YqZ/IZRwnuPa5Afc8YiTa580904=
 =77iX
 -----END PGP SIGNATURE-----

Merge tag 'v4.7-rockchip-soc32-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip into next/cleanup

Fix for a sparse build warning in the smp code.

* tag 'v4.7-rockchip-soc32-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip:
  ARM: rockchip: Fix use of plain integer as NULL pointer

Signed-off-by: Olof Johansson <olof@lixom.net>
2016-04-13 15:27:05 -07:00
Olof Johansson
a961bf24ba Rockchip soc-specific driver changes containing support for the
rk3399 powerdomains and necessary infrastructure changes to
 accomodate them - like supporting nested powerdomains here.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQEcBAABCAAGBQJXDJOJAAoJEPOmecmc0R2BUzYH/A8lSeOeH61VnPNuGG+s8KvF
 yPL7Plz/rVDj5mz+CQPmqdajxS8qDIBqiXKjno/BpOIdQ+5MRJW47wjWlvhFV3rl
 tde+rnfR7doh2cjDU2W7FVtWEz/vPGzboffgCtXGpm6qs2f6Uj+PK/NWfKjTsbog
 1VBk117DbGYVdfamfASTykwV9SZjPgjYBEyppWAPAU9d6Jb73aRbdQfkiCQCvrJg
 7JGg5hWwbd9TDVrUs3RZ8+PNMZnVEA3vcxNrvvhtivrAA1mSCl+1H1bTFcKEo+1C
 7PmEEBZh6jLEQ+5N2Yftsf8FF9hiB7JwSw/jLPBIM9Isv5MOF5BvZoDlDuo8/5A=
 =aaLP
 -----END PGP SIGNATURE-----

Merge tag 'v4.7-rockchip-drivers-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip into next/drivers

Rockchip soc-specific driver changes containing support for the
rk3399 powerdomains and necessary infrastructure changes to
accomodate them - like supporting nested powerdomains here.

* tag 'v4.7-rockchip-drivers-1' of git://git.kernel.org/pub/scm/linux/kernel/git/mmind/linux-rockchip:
  soc: rockchip: power-domain: check the existing of regmap
  soc: rockchip: power-domain: Modify power domain driver for rk3399
  dt-bindings: add binding for rk3399 power domains
  dt-bindings: add power-domain header for RK3399 SoCs
  soc: rockchip: power-domain: add support for sub-power domains
  soc: rockchip: power-domain: allow domains only handling idle requests
  soc: rockchip: power-domain: make idle handling optional

Signed-off-by: Olof Johansson <olof@lixom.net>
2016-04-13 15:25:31 -07:00
Heiko Stuebner
b6ac00bb9f ARM: multi_v7_defconfig: Enable new Rockchip display-controller drivers
Three types of display controller-drivers where added recently. The
Analogix Displayport variant and Designware MIPI DSI used for example
on the rk3288 as well as the Innosilicon HDMI controller used on the
rk3036.

Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Signed-off-by: Olof Johansson <olof@lixom.net>
2016-04-13 15:24:56 -07:00
Heiko Stuebner
0d14513bc2 ARM: multi_v7_defconfig: Enable Rockchip displayport phy
The displayport phy controls the output of the Analogix displayport
controller on Rockchip SoCs and is therefore one component to enable
veyron devices to use their internal display.

Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Signed-off-by: Olof Johansson <olof@lixom.net>
2016-04-13 15:24:44 -07:00
Olof Johansson
ed53ecbea7 SoCFPGA DTS updates for v4.7
- Update SD/MMC node for Arria10
 - Update Arria10 with clock and interrupt fields for DMA
 - Remove 'phy-addr' from stmmac node
 - Remove ethernet node from Cyclone5 DTSI
 - Add LEDs/KEYs/SWs support on Sockit
 - Add L2 and OCRAM EDAC dts entries
 - Add reset control for USB
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJXC/fUAAoJEBmUBAuBoyj0VsYP/3X4YaZ7zf/meoPi2xwJmzyf
 a9PUslTJ1GAs5p+0b20UdwSX0BQHrDKIZvhQ53ThAGbS3mQPEtlDP8bjhAFspjYL
 85FEvtLvS4HvMwopiUwHx+INnoL79KUnHMn1Y+A5QLAFq2vJe1frP2KnAiJX9HZr
 a3f4Eix7fI8qpa2ixXK9GnUppAhFVDqZ0RuxgXewGvWGyPykLHnl63FvfNgCZx6L
 s+8iGDMhsVwah9Kdv/OJielLeQqaQGeSE5+5t+YNszISyGatiwr2e/yx7//tjQwS
 f8Y6ck1P2N8ncWwJX0PiJxo0ssrLkfhqJS3YlB0OLCE/IwC8hUFAxEnUonb70owR
 jjpBzsPynARCdr3WuAu61FH2xGs4OfBryXUVhTIcB+XeNAcO5p+pBJu8pFA6PlM3
 MQsu7AwfpPlUWwaRLagRd/o86rhwf31YkcHt2F9UYwjyYUeqNlZSoPgf8NvIYILo
 f+qkV5mywWiZAtilT500byyWbivsEzjbjmpV4l+QMYvIYYbIwmPi2y78A/6l/ZKw
 xon/OzcH4Jtu/u4Bc4GL3S1yFPDlf8KrL1So47BZy6/Y7XLxf0lfE/PtDA+k7Eq1
 nUL4E6zf5KOAWizye0aDcMt4Sos9+7lxeHzu/CVPpgu4QXfk06fkVD5ePlZ72HBq
 Bt2Z9KtLFusBEJTvB5hk
 =gT7+
 -----END PGP SIGNATURE-----

Merge tag 'socfpga_dts_for_v4.7' of git://git.kernel.org/pub/scm/linux/kernel/git/dinguyen/linux into next/dt

SoCFPGA DTS updates for v4.7
- Update SD/MMC node for Arria10
- Update Arria10 with clock and interrupt fields for DMA
- Remove 'phy-addr' from stmmac node
- Remove ethernet node from Cyclone5 DTSI
- Add LEDs/KEYs/SWs support on Sockit
- Add L2 and OCRAM EDAC dts entries
- Add reset control for USB

* tag 'socfpga_dts_for_v4.7' of git://git.kernel.org/pub/scm/linux/kernel/git/dinguyen/linux:
  ARM: dts: socfpga: add reset control for USB
  ARM: dts: socfpga: Add Altera Arria10 OCRAM EDAC devicetree entry
  ARM: dts: socfpga: Add Altera Arria10 L2 Cache EDAC devicetree entry
  ARM: dts: socfpga: Add support for HPS KEYs/SWs on SoCKit
  ARM: dts: socfpga: Add support for HPS LEDs on SoCKit
  ARM: dts: socfpga: Drop gmac0 from CV dtsi
  ARM: dts: socfpga: Drop phy-addr OF property from CV dtsi
  ARM: dts: socfpga: Add missing clock and interrupt fields for Arria10 DMA
  ARM: dts: socfpga: add the clk-phase property for sd/mmc clock
  ARM: dts: socfpga: add cap-sd-highspeed for SD/MMC node

Signed-off-by: Olof Johansson <olof@lixom.net>
2016-04-13 15:17:42 -07:00