+++ /dev/null
-From 8013d1d7eafb0589ca766db6b74026f76b7f5cb4 Mon Sep 17 00:00:00 2001
-From: Hangbin Liu <liuhangbin@gmail.com>
-Date: Thu, 30 Jul 2015 14:28:42 +0800
-Subject: net/ipv6: add sysctl option accept_ra_min_hop_limit
-
-From: Hangbin Liu <liuhangbin@gmail.com>
-
-commit 8013d1d7eafb0589ca766db6b74026f76b7f5cb4 upstream.
-
-Commit 6fd99094de2b ("ipv6: Don't reduce hop limit for an interface")
-disabled accept hop limit from RA if it is smaller than the current hop
-limit for security stuff. But this behavior kind of break the RFC definition.
-
-RFC 4861, 6.3.4. Processing Received Router Advertisements
- A Router Advertisement field (e.g., Cur Hop Limit, Reachable Time,
- and Retrans Timer) may contain a value denoting that it is
- unspecified. In such cases, the parameter should be ignored and the
- host should continue using whatever value it is already using.
-
- If the received Cur Hop Limit value is non-zero, the host SHOULD set
- its CurHopLimit variable to the received value.
-
-So add sysctl option accept_ra_min_hop_limit to let user choose the minimum
-hop limit value they can accept from RA. And set default to 1 to meet RFC
-standards.
-
-Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
-Acked-by: YOSHIFUJI Hideaki <hideaki.yoshifuji@miraclelinux.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- Documentation/networking/ip-sysctl.txt | 8 ++++++++
- include/linux/ipv6.h | 1 +
- include/uapi/linux/ipv6.h | 1 +
- net/ipv6/addrconf.c | 10 ++++++++++
- net/ipv6/ndisc.c | 16 +++++++---------
- 5 files changed, 27 insertions(+), 9 deletions(-)
-
---- a/Documentation/networking/ip-sysctl.txt
-+++ b/Documentation/networking/ip-sysctl.txt
-@@ -1256,6 +1256,14 @@ accept_ra_from_local - BOOLEAN
- disabled if accept_ra_from_local is disabled
- on a specific interface.
-
-+accept_ra_min_hop_limit - INTEGER
-+ Minimum hop limit Information in Router Advertisement.
-+
-+ Hop limit Information in Router Advertisement less than this
-+ variable shall be ignored.
-+
-+ Default: 1
-+
- accept_ra_pinfo - BOOLEAN
- Learn Prefix Information in Router Advertisement.
-
---- a/include/linux/ipv6.h
-+++ b/include/linux/ipv6.h
-@@ -29,6 +29,7 @@ struct ipv6_devconf {
- __s32 max_desync_factor;
- __s32 max_addresses;
- __s32 accept_ra_defrtr;
-+ __s32 accept_ra_min_hop_limit;
- __s32 accept_ra_pinfo;
- #ifdef CONFIG_IPV6_ROUTER_PREF
- __s32 accept_ra_rtr_pref;
---- a/include/uapi/linux/ipv6.h
-+++ b/include/uapi/linux/ipv6.h
-@@ -164,6 +164,7 @@ enum {
- DEVCONF_MLDV2_UNSOLICITED_REPORT_INTERVAL,
- DEVCONF_SUPPRESS_FRAG_NDISC,
- DEVCONF_ACCEPT_RA_FROM_LOCAL,
-+ DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT,
- DEVCONF_MAX
- };
-
---- a/net/ipv6/addrconf.c
-+++ b/net/ipv6/addrconf.c
-@@ -188,6 +188,7 @@ static struct ipv6_devconf ipv6_devconf
- .max_addresses = IPV6_MAX_ADDRESSES,
- .accept_ra_defrtr = 1,
- .accept_ra_from_local = 0,
-+ .accept_ra_min_hop_limit= 1,
- .accept_ra_pinfo = 1,
- #ifdef CONFIG_IPV6_ROUTER_PREF
- .accept_ra_rtr_pref = 1,
-@@ -225,6 +226,7 @@ static struct ipv6_devconf ipv6_devconf_
- .max_addresses = IPV6_MAX_ADDRESSES,
- .accept_ra_defrtr = 1,
- .accept_ra_from_local = 0,
-+ .accept_ra_min_hop_limit= 1,
- .accept_ra_pinfo = 1,
- #ifdef CONFIG_IPV6_ROUTER_PREF
- .accept_ra_rtr_pref = 1,
-@@ -4321,6 +4323,7 @@ static inline void ipv6_store_devconf(st
- array[DEVCONF_MAX_DESYNC_FACTOR] = cnf->max_desync_factor;
- array[DEVCONF_MAX_ADDRESSES] = cnf->max_addresses;
- array[DEVCONF_ACCEPT_RA_DEFRTR] = cnf->accept_ra_defrtr;
-+ array[DEVCONF_ACCEPT_RA_MIN_HOP_LIMIT] = cnf->accept_ra_min_hop_limit;
- array[DEVCONF_ACCEPT_RA_PINFO] = cnf->accept_ra_pinfo;
- #ifdef CONFIG_IPV6_ROUTER_PREF
- array[DEVCONF_ACCEPT_RA_RTR_PREF] = cnf->accept_ra_rtr_pref;
-@@ -5135,6 +5138,13 @@ static struct addrconf_sysctl_table
- .maxlen = sizeof(int),
- .mode = 0644,
- .proc_handler = proc_dointvec,
-+ },
-+ {
-+ .procname = "accept_ra_min_hop_limit",
-+ .data = &ipv6_devconf.accept_ra_min_hop_limit,
-+ .maxlen = sizeof(int),
-+ .mode = 0644,
-+ .proc_handler = proc_dointvec,
- },
- {
- .procname = "accept_ra_pinfo",
---- a/net/ipv6/ndisc.c
-+++ b/net/ipv6/ndisc.c
-@@ -1214,18 +1214,16 @@ static void ndisc_router_discovery(struc
-
- if (rt)
- rt6_set_expires(rt, jiffies + (HZ * lifetime));
-- if (ra_msg->icmph.icmp6_hop_limit) {
-- /* Only set hop_limit on the interface if it is higher than
-- * the current hop_limit.
-- */
-- if (in6_dev->cnf.hop_limit < ra_msg->icmph.icmp6_hop_limit) {
-+ if (in6_dev->cnf.accept_ra_min_hop_limit < 256 &&
-+ ra_msg->icmph.icmp6_hop_limit) {
-+ if (in6_dev->cnf.accept_ra_min_hop_limit <= ra_msg->icmph.icmp6_hop_limit) {
- in6_dev->cnf.hop_limit = ra_msg->icmph.icmp6_hop_limit;
-+ if (rt)
-+ dst_metric_set(&rt->dst, RTAX_HOPLIMIT,
-+ ra_msg->icmph.icmp6_hop_limit);
- } else {
-- ND_PRINTK(2, warn, "RA: Got route advertisement with lower hop_limit than current\n");
-+ ND_PRINTK(2, warn, "RA: Got route advertisement with lower hop_limit than minimum\n");
- }
-- if (rt)
-- dst_metric_set(&rt->dst, RTAX_HOPLIMIT,
-- ra_msg->icmph.icmp6_hop_limit);
- }
-
- skip_defrtr:
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
- drivers/tty/serial/samsung.c | 31 ++++++++++++++++++++++++-------
- 1 file changed, 24 insertions(+), 7 deletions(-)
+ drivers/tty/serial/samsung.c | 30 ++++++++++++++++++++++++------
+ 1 file changed, 24 insertions(+), 6 deletions(-)
--- a/drivers/tty/serial/samsung.c
+++ b/drivers/tty/serial/samsung.c
-@@ -859,7 +859,7 @@ static void s3c24xx_serial_break_ctl(str
- static int s3c24xx_serial_request_dma(struct s3c24xx_uart_port *p)
+@@ -860,6 +860,7 @@ static int s3c24xx_serial_request_dma(st
{
struct s3c24xx_uart_dma *dma = p->dma;
-- unsigned long flags;
+ unsigned long flags;
+ int ret;
/* Default slave configuration parameters */
dma->rx_conf.direction = DMA_DEV_TO_MEM;
-@@ -884,8 +884,8 @@ static int s3c24xx_serial_request_dma(st
+@@ -884,8 +885,8 @@ static int s3c24xx_serial_request_dma(st
dma->tx_chan = dma_request_chan(p->port.dev, "tx");
if (IS_ERR(dma->tx_chan)) {
}
dmaengine_slave_config(dma->tx_chan, &dma->tx_conf);
-@@ -894,15 +894,17 @@ static int s3c24xx_serial_request_dma(st
+@@ -894,15 +895,17 @@ static int s3c24xx_serial_request_dma(st
dma->rx_size = PAGE_SIZE;
dma->rx_buf = kmalloc(dma->rx_size, GFP_KERNEL);
spin_lock_irqsave(&p->port.lock, flags);
-@@ -911,8 +913,23 @@ static int s3c24xx_serial_request_dma(st
+@@ -911,8 +914,23 @@ static int s3c24xx_serial_request_dma(st
UART_XMIT_SIZE, DMA_TO_DEVICE);
spin_unlock_irqrestore(&p->port.lock, flags);