From: Paul Gortmaker <paul.gortmaker@windriver.com>
To: <stable@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Cc: Eric Dumazet <eric.dumazet@gmail.com>,
Herbert Xu <herbert@gondor.apana.org.au>,
"David S. Miller" <davem@davemloft.net>,
Ben Hutchings <ben@decadent.org.uk>, Willy Tarreau <w@1wt.eu>,
Paul Gortmaker <paul.gortmaker@windriver.com>
Subject: [v2.6.34-stable 005/213] inet: add RCU protection to inet->opt
Date: Wed, 5 Feb 2014 14:59:20 -0500 [thread overview]
Message-ID: <1391630568-49251-6-git-send-email-paul.gortmaker@windriver.com> (raw)
In-Reply-To: <1391630568-49251-1-git-send-email-paul.gortmaker@windriver.com>
From: Eric Dumazet <eric.dumazet@gmail.com>
-------------------
This is a commit scheduled for the next v2.6.34 longterm release.
http://git.kernel.org/?p=linux/kernel/git/paulg/longterm-queue-2.6.34.git
If you see a problem with using this for longterm, please comment.
-------------------
commit f6d8bd051c391c1c0458a30b2a7abcd939329259 upstream.
We lack proper synchronization to manipulate inet->opt ip_options
Problem is ip_make_skb() calls ip_setup_cork() and
ip_setup_cork() possibly makes a copy of ipc->opt (struct ip_options),
without any protection against another thread manipulating inet->opt.
Another thread can change inet->opt pointer and free old one under us.
Use RCU to protect inet->opt (changed to inet->inet_opt).
Instead of handling atomic refcounts, just copy ip_options when
necessary, to avoid cache line dirtying.
We cant insert an rcu_head in struct ip_options since its included in
skb->cb[], so this patch is large because I had to introduce a new
ip_options_rcu structure.
Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
[dannf/bwh: backported to Debian's 2.6.32]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Signed-off-by: Willy Tarreau <w@1wt.eu>
[PG: use 2.6.32 patch, since it is closer to 2.6.34 than original
baseline; drop net/l2tp/l2tp_ip.c chunk as we don't have that file]
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
---
include/net/inet_sock.h | 14 +++--
include/net/ip.h | 11 ++--
net/dccp/ipv4.c | 15 +++---
net/dccp/ipv6.c | 2 +-
net/ipv4/af_inet.c | 16 ++++--
net/ipv4/cipso_ipv4.c | 113 ++++++++++++++++++++++------------------
net/ipv4/icmp.c | 23 ++++----
net/ipv4/inet_connection_sock.c | 8 +--
net/ipv4/ip_options.c | 38 +++++++-------
net/ipv4/ip_output.c | 50 +++++++++---------
net/ipv4/ip_sockglue.c | 33 ++++++++----
net/ipv4/raw.c | 19 +++++--
net/ipv4/syncookies.c | 4 +-
net/ipv4/tcp_ipv4.c | 33 +++++++-----
net/ipv4/udp.c | 21 ++++++--
net/ipv6/tcp_ipv6.c | 2 +-
16 files changed, 235 insertions(+), 167 deletions(-)
diff --git a/include/net/inet_sock.h b/include/net/inet_sock.h
index 83fd34437cf1..648000dd4b97 100644
--- a/include/net/inet_sock.h
+++ b/include/net/inet_sock.h
@@ -56,7 +56,15 @@ struct ip_options {
unsigned char __data[0];
};
-#define optlength(opt) (sizeof(struct ip_options) + opt->optlen)
+struct ip_options_rcu {
+ struct rcu_head rcu;
+ struct ip_options opt;
+};
+
+struct ip_options_data {
+ struct ip_options_rcu opt;
+ char data[40];
+};
struct inet_request_sock {
struct request_sock req;
@@ -77,7 +85,7 @@ struct inet_request_sock {
acked : 1,
no_srccheck: 1;
kmemcheck_bitfield_end(flags);
- struct ip_options *opt;
+ struct ip_options_rcu *opt;
};
static inline struct inet_request_sock *inet_rsk(const struct request_sock *sk)
@@ -125,7 +133,7 @@ struct inet_sock {
__be16 inet_sport;
__u16 inet_id;
- struct ip_options *opt;
+ struct ip_options_rcu *inet_opt;
__u8 tos;
__u8 min_ttl;
__u8 mc_ttl;
diff --git a/include/net/ip.h b/include/net/ip.h
index 503994a38ed1..ac9506e74c29 100644
--- a/include/net/ip.h
+++ b/include/net/ip.h
@@ -52,7 +52,7 @@ static inline unsigned int ip_hdrlen(const struct sk_buff *skb)
struct ipcm_cookie {
__be32 addr;
int oif;
- struct ip_options *opt;
+ struct ip_options_rcu *opt;
union skb_shared_tx shtx;
};
@@ -89,7 +89,7 @@ extern int igmp_mc_proc_init(void);
extern int ip_build_and_send_pkt(struct sk_buff *skb, struct sock *sk,
__be32 saddr, __be32 daddr,
- struct ip_options *opt);
+ struct ip_options_rcu *opt);
extern int ip_rcv(struct sk_buff *skb, struct net_device *dev,
struct packet_type *pt, struct net_device *orig_dev);
extern int ip_local_deliver(struct sk_buff *skb);
@@ -376,14 +376,15 @@ extern int ip_forward(struct sk_buff *skb);
* Functions provided by ip_options.c
*/
-extern void ip_options_build(struct sk_buff *skb, struct ip_options *opt, __be32 daddr, struct rtable *rt, int is_frag);
+extern void ip_options_build(struct sk_buff *skb, struct ip_options *opt,
+ __be32 daddr, struct rtable *rt, int is_frag);
extern int ip_options_echo(struct ip_options *dopt, struct sk_buff *skb);
extern void ip_options_fragment(struct sk_buff *skb);
extern int ip_options_compile(struct net *net,
struct ip_options *opt, struct sk_buff *skb);
-extern int ip_options_get(struct net *net, struct ip_options **optp,
+extern int ip_options_get(struct net *net, struct ip_options_rcu **optp,
unsigned char *data, int optlen);
-extern int ip_options_get_from_user(struct net *net, struct ip_options **optp,
+extern int ip_options_get_from_user(struct net *net, struct ip_options_rcu **optp,
unsigned char __user *data, int optlen);
extern void ip_options_undo(struct ip_options * opt);
extern void ip_forward_options(struct sk_buff *skb);
diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c
index e072e018b068..d73f17ff95f6 100644
--- a/net/dccp/ipv4.c
+++ b/net/dccp/ipv4.c
@@ -48,6 +48,7 @@ int dccp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
__be32 daddr, nexthop;
int tmp;
int err;
+ struct ip_options_rcu *inet_opt;
dp->dccps_role = DCCP_ROLE_CLIENT;
@@ -58,10 +59,12 @@ int dccp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
return -EAFNOSUPPORT;
nexthop = daddr = usin->sin_addr.s_addr;
- if (inet->opt != NULL && inet->opt->srr) {
+
+ inet_opt = inet->inet_opt;
+ if (inet_opt != NULL && inet_opt->opt.srr) {
if (daddr == 0)
return -EINVAL;
- nexthop = inet->opt->faddr;
+ nexthop = inet_opt->opt.faddr;
}
tmp = ip_route_connect(&rt, nexthop, inet->inet_saddr,
@@ -76,7 +79,7 @@ int dccp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
return -ENETUNREACH;
}
- if (inet->opt == NULL || !inet->opt->srr)
+ if (inet_opt == NULL || !inet_opt->opt.srr)
daddr = rt->rt_dst;
if (inet->inet_saddr == 0)
@@ -87,8 +90,8 @@ int dccp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
inet->inet_daddr = daddr;
inet_csk(sk)->icsk_ext_hdr_len = 0;
- if (inet->opt != NULL)
- inet_csk(sk)->icsk_ext_hdr_len = inet->opt->optlen;
+ if (inet_opt)
+ inet_csk(sk)->icsk_ext_hdr_len = inet_opt->opt.optlen;
/*
* Socket identity is still unknown (sport may be zero).
* However we set state to DCCP_REQUESTING and not releasing socket
@@ -402,7 +405,7 @@ struct sock *dccp_v4_request_recv_sock(struct sock *sk, struct sk_buff *skb,
newinet->inet_daddr = ireq->rmt_addr;
newinet->inet_rcv_saddr = ireq->loc_addr;
newinet->inet_saddr = ireq->loc_addr;
- newinet->opt = ireq->opt;
+ newinet->inet_opt = ireq->opt;
ireq->opt = NULL;
newinet->mc_index = inet_iif(skb);
newinet->mc_ttl = ip_hdr(skb)->ttl;
diff --git a/net/dccp/ipv6.c b/net/dccp/ipv6.c
index fec7de6cfe6e..90f65e1dd4cf 100644
--- a/net/dccp/ipv6.c
+++ b/net/dccp/ipv6.c
@@ -600,7 +600,7 @@ static struct sock *dccp_v6_request_recv_sock(struct sock *sk,
First: no IPv4 options.
*/
- newinet->opt = NULL;
+ newinet->inet_opt = NULL;
/* Clone RX bits */
newnp->rxopt.all = np->rxopt.all;
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
index 8897b3c7d05a..4dd4aad58d93 100644
--- a/net/ipv4/af_inet.c
+++ b/net/ipv4/af_inet.c
@@ -153,7 +153,7 @@ void inet_sock_destruct(struct sock *sk)
WARN_ON(sk->sk_wmem_queued);
WARN_ON(sk->sk_forward_alloc);
- kfree(inet->opt);
+ kfree(inet->inet_opt);
dst_release(sk->sk_dst_cache);
sk_refcnt_debug_dec(sk);
}
@@ -1069,9 +1069,11 @@ static int inet_sk_reselect_saddr(struct sock *sk)
__be32 old_saddr = inet->inet_saddr;
__be32 new_saddr;
__be32 daddr = inet->inet_daddr;
+ struct ip_options_rcu *inet_opt;
- if (inet->opt && inet->opt->srr)
- daddr = inet->opt->faddr;
+ inet_opt = inet->inet_opt;
+ if (inet_opt && inet_opt->opt.srr)
+ daddr = inet_opt->opt.faddr;
/* Query new route. */
err = ip_route_connect(&rt, daddr, 0,
@@ -1113,6 +1115,7 @@ int inet_sk_rebuild_header(struct sock *sk)
struct inet_sock *inet = inet_sk(sk);
struct rtable *rt = (struct rtable *)__sk_dst_check(sk, 0);
__be32 daddr;
+ struct ip_options_rcu *inet_opt;
int err;
/* Route is OK, nothing to do. */
@@ -1120,9 +1123,12 @@ int inet_sk_rebuild_header(struct sock *sk)
return 0;
/* Reroute. */
+ rcu_read_lock();
+ inet_opt = rcu_dereference(inet->inet_opt);
daddr = inet->inet_daddr;
- if (inet->opt && inet->opt->srr)
- daddr = inet->opt->faddr;
+ if (inet_opt && inet_opt->opt.srr)
+ daddr = inet_opt->opt.faddr;
+ rcu_read_unlock();
{
struct flowi fl = {
.oif = sk->sk_bound_dev_if,
diff --git a/net/ipv4/cipso_ipv4.c b/net/ipv4/cipso_ipv4.c
index c97cd9ff697e..d5ef60963183 100644
--- a/net/ipv4/cipso_ipv4.c
+++ b/net/ipv4/cipso_ipv4.c
@@ -1859,6 +1859,11 @@ static int cipso_v4_genopt(unsigned char *buf, u32 buf_len,
return CIPSO_V4_HDR_LEN + ret_val;
}
+static void opt_kfree_rcu(struct rcu_head *head)
+{
+ kfree(container_of(head, struct ip_options_rcu, rcu));
+}
+
/**
* cipso_v4_sock_setattr - Add a CIPSO option to a socket
* @sk: the socket
@@ -1881,7 +1886,7 @@ int cipso_v4_sock_setattr(struct sock *sk,
unsigned char *buf = NULL;
u32 buf_len;
u32 opt_len;
- struct ip_options *opt = NULL;
+ struct ip_options_rcu *old, *opt = NULL;
struct inet_sock *sk_inet;
struct inet_connection_sock *sk_conn;
@@ -1917,22 +1922,25 @@ int cipso_v4_sock_setattr(struct sock *sk,
ret_val = -ENOMEM;
goto socket_setattr_failure;
}
- memcpy(opt->__data, buf, buf_len);
- opt->optlen = opt_len;
- opt->cipso = sizeof(struct iphdr);
+ memcpy(opt->opt.__data, buf, buf_len);
+ opt->opt.optlen = opt_len;
+ opt->opt.cipso = sizeof(struct iphdr);
kfree(buf);
buf = NULL;
sk_inet = inet_sk(sk);
+
+ old = sk_inet->inet_opt;
if (sk_inet->is_icsk) {
sk_conn = inet_csk(sk);
- if (sk_inet->opt)
- sk_conn->icsk_ext_hdr_len -= sk_inet->opt->optlen;
- sk_conn->icsk_ext_hdr_len += opt->optlen;
+ if (old)
+ sk_conn->icsk_ext_hdr_len -= old->opt.optlen;
+ sk_conn->icsk_ext_hdr_len += opt->opt.optlen;
sk_conn->icsk_sync_mss(sk, sk_conn->icsk_pmtu_cookie);
}
- opt = xchg(&sk_inet->opt, opt);
- kfree(opt);
+ rcu_assign_pointer(sk_inet->inet_opt, opt);
+ if (old)
+ call_rcu(&old->rcu, opt_kfree_rcu);
return 0;
@@ -1962,7 +1970,7 @@ int cipso_v4_req_setattr(struct request_sock *req,
unsigned char *buf = NULL;
u32 buf_len;
u32 opt_len;
- struct ip_options *opt = NULL;
+ struct ip_options_rcu *opt = NULL;
struct inet_request_sock *req_inet;
/* We allocate the maximum CIPSO option size here so we are probably
@@ -1990,15 +1998,16 @@ int cipso_v4_req_setattr(struct request_sock *req,
ret_val = -ENOMEM;
goto req_setattr_failure;
}
- memcpy(opt->__data, buf, buf_len);
- opt->optlen = opt_len;
- opt->cipso = sizeof(struct iphdr);
+ memcpy(opt->opt.__data, buf, buf_len);
+ opt->opt.optlen = opt_len;
+ opt->opt.cipso = sizeof(struct iphdr);
kfree(buf);
buf = NULL;
req_inet = inet_rsk(req);
opt = xchg(&req_inet->opt, opt);
- kfree(opt);
+ if (opt)
+ call_rcu(&opt->rcu, opt_kfree_rcu);
return 0;
@@ -2018,34 +2027,34 @@ req_setattr_failure:
* values on failure.
*
*/
-static int cipso_v4_delopt(struct ip_options **opt_ptr)
+static int cipso_v4_delopt(struct ip_options_rcu **opt_ptr)
{
int hdr_delta = 0;
- struct ip_options *opt = *opt_ptr;
+ struct ip_options_rcu *opt = *opt_ptr;
- if (opt->srr || opt->rr || opt->ts || opt->router_alert) {
+ if (opt->opt.srr || opt->opt.rr || opt->opt.ts || opt->opt.router_alert) {
u8 cipso_len;
u8 cipso_off;
unsigned char *cipso_ptr;
int iter;
int optlen_new;
- cipso_off = opt->cipso - sizeof(struct iphdr);
- cipso_ptr = &opt->__data[cipso_off];
+ cipso_off = opt->opt.cipso - sizeof(struct iphdr);
+ cipso_ptr = &opt->opt.__data[cipso_off];
cipso_len = cipso_ptr[1];
- if (opt->srr > opt->cipso)
- opt->srr -= cipso_len;
- if (opt->rr > opt->cipso)
- opt->rr -= cipso_len;
- if (opt->ts > opt->cipso)
- opt->ts -= cipso_len;
- if (opt->router_alert > opt->cipso)
- opt->router_alert -= cipso_len;
- opt->cipso = 0;
+ if (opt->opt.srr > opt->opt.cipso)
+ opt->opt.srr -= cipso_len;
+ if (opt->opt.rr > opt->opt.cipso)
+ opt->opt.rr -= cipso_len;
+ if (opt->opt.ts > opt->opt.cipso)
+ opt->opt.ts -= cipso_len;
+ if (opt->opt.router_alert > opt->opt.cipso)
+ opt->opt.router_alert -= cipso_len;
+ opt->opt.cipso = 0;
memmove(cipso_ptr, cipso_ptr + cipso_len,
- opt->optlen - cipso_off - cipso_len);
+ opt->opt.optlen - cipso_off - cipso_len);
/* determining the new total option length is tricky because of
* the padding necessary, the only thing i can think to do at
@@ -2054,21 +2063,21 @@ static int cipso_v4_delopt(struct ip_options **opt_ptr)
* from there we can determine the new total option length */
iter = 0;
optlen_new = 0;
- while (iter < opt->optlen)
- if (opt->__data[iter] != IPOPT_NOP) {
- iter += opt->__data[iter + 1];
+ while (iter < opt->opt.optlen)
+ if (opt->opt.__data[iter] != IPOPT_NOP) {
+ iter += opt->opt.__data[iter + 1];
optlen_new = iter;
} else
iter++;
- hdr_delta = opt->optlen;
- opt->optlen = (optlen_new + 3) & ~3;
- hdr_delta -= opt->optlen;
+ hdr_delta = opt->opt.optlen;
+ opt->opt.optlen = (optlen_new + 3) & ~3;
+ hdr_delta -= opt->opt.optlen;
} else {
/* only the cipso option was present on the socket so we can
* remove the entire option struct */
*opt_ptr = NULL;
- hdr_delta = opt->optlen;
- kfree(opt);
+ hdr_delta = opt->opt.optlen;
+ call_rcu(&opt->rcu, opt_kfree_rcu);
}
return hdr_delta;
@@ -2085,15 +2094,15 @@ static int cipso_v4_delopt(struct ip_options **opt_ptr)
void cipso_v4_sock_delattr(struct sock *sk)
{
int hdr_delta;
- struct ip_options *opt;
+ struct ip_options_rcu *opt;
struct inet_sock *sk_inet;
sk_inet = inet_sk(sk);
- opt = sk_inet->opt;
- if (opt == NULL || opt->cipso == 0)
+ opt = sk_inet->inet_opt;
+ if (opt == NULL || opt->opt.cipso == 0)
return;
- hdr_delta = cipso_v4_delopt(&sk_inet->opt);
+ hdr_delta = cipso_v4_delopt(&sk_inet->inet_opt);
if (sk_inet->is_icsk && hdr_delta > 0) {
struct inet_connection_sock *sk_conn = inet_csk(sk);
sk_conn->icsk_ext_hdr_len -= hdr_delta;
@@ -2111,12 +2120,12 @@ void cipso_v4_sock_delattr(struct sock *sk)
*/
void cipso_v4_req_delattr(struct request_sock *req)
{
- struct ip_options *opt;
+ struct ip_options_rcu *opt;
struct inet_request_sock *req_inet;
req_inet = inet_rsk(req);
opt = req_inet->opt;
- if (opt == NULL || opt->cipso == 0)
+ if (opt == NULL || opt->opt.cipso == 0)
return;
cipso_v4_delopt(&req_inet->opt);
@@ -2186,14 +2195,18 @@ getattr_return:
*/
int cipso_v4_sock_getattr(struct sock *sk, struct netlbl_lsm_secattr *secattr)
{
- struct ip_options *opt;
+ struct ip_options_rcu *opt;
+ int res = -ENOMSG;
- opt = inet_sk(sk)->opt;
- if (opt == NULL || opt->cipso == 0)
- return -ENOMSG;
-
- return cipso_v4_getattr(opt->__data + opt->cipso - sizeof(struct iphdr),
- secattr);
+ rcu_read_lock();
+ opt = rcu_dereference(inet_sk(sk)->inet_opt);
+ if (opt && opt->opt.cipso)
+ res = cipso_v4_getattr(opt->opt.__data +
+ opt->opt.cipso -
+ sizeof(struct iphdr),
+ secattr);
+ rcu_read_unlock();
+ return res;
}
/**
diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c
index ac4dec132735..4a5137a9e24c 100644
--- a/net/ipv4/icmp.c
+++ b/net/ipv4/icmp.c
@@ -108,8 +108,7 @@ struct icmp_bxm {
__be32 times[3];
} data;
int head_len;
- struct ip_options replyopts;
- unsigned char optbuf[40];
+ struct ip_options_data replyopts;
};
/* An array of errno for error messages from dest unreach. */
@@ -363,7 +362,7 @@ static void icmp_reply(struct icmp_bxm *icmp_param, struct sk_buff *skb)
struct inet_sock *inet;
__be32 daddr;
- if (ip_options_echo(&icmp_param->replyopts, skb))
+ if (ip_options_echo(&icmp_param->replyopts.opt.opt, skb))
return;
sk = icmp_xmit_lock(net);
@@ -377,10 +376,10 @@ static void icmp_reply(struct icmp_bxm *icmp_param, struct sk_buff *skb)
daddr = ipc.addr = rt->rt_src;
ipc.opt = NULL;
ipc.shtx.flags = 0;
- if (icmp_param->replyopts.optlen) {
- ipc.opt = &icmp_param->replyopts;
- if (ipc.opt->srr)
- daddr = icmp_param->replyopts.faddr;
+ if (icmp_param->replyopts.opt.opt.optlen) {
+ ipc.opt = &icmp_param->replyopts.opt;
+ if (ipc.opt->opt.srr)
+ daddr = icmp_param->replyopts.opt.opt.faddr;
}
{
struct flowi fl = { .nl_u = { .ip4_u =
@@ -518,7 +517,7 @@ void icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info)
IPTOS_PREC_INTERNETCONTROL) :
iph->tos;
- if (ip_options_echo(&icmp_param.replyopts, skb_in))
+ if (ip_options_echo(&icmp_param.replyopts.opt.opt, skb_in))
goto out_unlock;
@@ -534,15 +533,15 @@ void icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info)
icmp_param.offset = skb_network_offset(skb_in);
inet_sk(sk)->tos = tos;
ipc.addr = iph->saddr;
- ipc.opt = &icmp_param.replyopts;
+ ipc.opt = &icmp_param.replyopts.opt;
ipc.shtx.flags = 0;
{
struct flowi fl = {
.nl_u = {
.ip4_u = {
- .daddr = icmp_param.replyopts.srr ?
- icmp_param.replyopts.faddr :
+ .daddr = icmp_param.replyopts.opt.opt.srr ?
+ icmp_param.replyopts.opt.opt.faddr :
iph->saddr,
.saddr = saddr,
.tos = RT_TOS(tos)
@@ -631,7 +630,7 @@ route_done:
room = dst_mtu(&rt->u.dst);
if (room > 576)
room = 576;
- room -= sizeof(struct iphdr) + icmp_param.replyopts.optlen;
+ room -= sizeof(struct iphdr) + icmp_param.replyopts.opt.opt.optlen;
room -= sizeof(struct icmphdr);
icmp_param.data_len = skb_in->len - icmp_param.offset;
diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c
index 8da6429269dd..9f57d0f75631 100644
--- a/net/ipv4/inet_connection_sock.c
+++ b/net/ipv4/inet_connection_sock.c
@@ -356,12 +356,12 @@ struct dst_entry *inet_csk_route_req(struct sock *sk,
{
struct rtable *rt;
const struct inet_request_sock *ireq = inet_rsk(req);
- struct ip_options *opt = inet_rsk(req)->opt;
+ struct ip_options_rcu *opt = inet_rsk(req)->opt;
struct flowi fl = { .oif = sk->sk_bound_dev_if,
.mark = sk->sk_mark,
.nl_u = { .ip4_u =
- { .daddr = ((opt && opt->srr) ?
- opt->faddr :
+ { .daddr = ((opt && opt->opt.srr) ?
+ opt->opt.faddr :
ireq->rmt_addr),
.saddr = ireq->loc_addr,
.tos = RT_CONN_FLAGS(sk) } },
@@ -375,7 +375,7 @@ struct dst_entry *inet_csk_route_req(struct sock *sk,
security_req_classify_flow(req, &fl);
if (ip_route_output_flow(net, &rt, &fl, sk, 0))
goto no_route;
- if (opt && opt->is_strictroute && rt->rt_dst != rt->rt_gateway)
+ if (opt && opt->opt.is_strictroute && rt->rt_dst != rt->rt_gateway)
goto route_err;
return &rt->u.dst;
diff --git a/net/ipv4/ip_options.c b/net/ipv4/ip_options.c
index 4c09a31fd140..f4281aad1df0 100644
--- a/net/ipv4/ip_options.c
+++ b/net/ipv4/ip_options.c
@@ -36,7 +36,7 @@
* saddr is address of outgoing interface.
*/
-void ip_options_build(struct sk_buff * skb, struct ip_options * opt,
+void ip_options_build(struct sk_buff *skb, struct ip_options *opt,
__be32 daddr, struct rtable *rt, int is_frag)
{
unsigned char *iph = skb_network_header(skb);
@@ -83,9 +83,9 @@ void ip_options_build(struct sk_buff * skb, struct ip_options * opt,
* NOTE: dopt cannot point to skb.
*/
-int ip_options_echo(struct ip_options * dopt, struct sk_buff * skb)
+int ip_options_echo(struct ip_options *dopt, struct sk_buff *skb)
{
- struct ip_options *sopt;
+ const struct ip_options *sopt;
unsigned char *sptr, *dptr;
int soffset, doffset;
int optlen;
@@ -95,10 +95,8 @@ int ip_options_echo(struct ip_options * dopt, struct sk_buff * skb)
sopt = &(IPCB(skb)->opt);
- if (sopt->optlen == 0) {
- dopt->optlen = 0;
+ if (sopt->optlen == 0)
return 0;
- }
sptr = skb_network_header(skb);
dptr = dopt->__data;
@@ -157,7 +155,7 @@ int ip_options_echo(struct ip_options * dopt, struct sk_buff * skb)
dopt->optlen += optlen;
}
if (sopt->srr) {
- unsigned char * start = sptr+sopt->srr;
+ unsigned char *start = sptr+sopt->srr;
__be32 faddr;
optlen = start[1];
@@ -500,19 +498,19 @@ void ip_options_undo(struct ip_options * opt)
}
}
-static struct ip_options *ip_options_get_alloc(const int optlen)
+static struct ip_options_rcu *ip_options_get_alloc(const int optlen)
{
- return kzalloc(sizeof(struct ip_options) + ((optlen + 3) & ~3),
+ return kzalloc(sizeof(struct ip_options_rcu) + ((optlen + 3) & ~3),
GFP_KERNEL);
}
-static int ip_options_get_finish(struct net *net, struct ip_options **optp,
- struct ip_options *opt, int optlen)
+static int ip_options_get_finish(struct net *net, struct ip_options_rcu **optp,
+ struct ip_options_rcu *opt, int optlen)
{
while (optlen & 3)
- opt->__data[optlen++] = IPOPT_END;
- opt->optlen = optlen;
- if (optlen && ip_options_compile(net, opt, NULL)) {
+ opt->opt.__data[optlen++] = IPOPT_END;
+ opt->opt.optlen = optlen;
+ if (optlen && ip_options_compile(net, &opt->opt, NULL)) {
kfree(opt);
return -EINVAL;
}
@@ -521,29 +519,29 @@ static int ip_options_get_finish(struct net *net, struct ip_options **optp,
return 0;
}
-int ip_options_get_from_user(struct net *net, struct ip_options **optp,
+int ip_options_get_from_user(struct net *net, struct ip_options_rcu **optp,
unsigned char __user *data, int optlen)
{
- struct ip_options *opt = ip_options_get_alloc(optlen);
+ struct ip_options_rcu *opt = ip_options_get_alloc(optlen);
if (!opt)
return -ENOMEM;
- if (optlen && copy_from_user(opt->__data, data, optlen)) {
+ if (optlen && copy_from_user(opt->opt.__data, data, optlen)) {
kfree(opt);
return -EFAULT;
}
return ip_options_get_finish(net, optp, opt, optlen);
}
-int ip_options_get(struct net *net, struct ip_options **optp,
+int ip_options_get(struct net *net, struct ip_options_rcu **optp,
unsigned char *data, int optlen)
{
- struct ip_options *opt = ip_options_get_alloc(optlen);
+ struct ip_options_rcu *opt = ip_options_get_alloc(optlen);
if (!opt)
return -ENOMEM;
if (optlen)
- memcpy(opt->__data, data, optlen);
+ memcpy(opt->opt.__data, data, optlen);
return ip_options_get_finish(net, optp, opt, optlen);
}
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
index d52fe4bd573f..e669da63be31 100644
--- a/net/ipv4/ip_output.c
+++ b/net/ipv4/ip_output.c
@@ -138,14 +138,14 @@ static inline int ip_select_ttl(struct inet_sock *inet, struct dst_entry *dst)
*
*/
int ip_build_and_send_pkt(struct sk_buff *skb, struct sock *sk,
- __be32 saddr, __be32 daddr, struct ip_options *opt)
+ __be32 saddr, __be32 daddr, struct ip_options_rcu *opt)
{
struct inet_sock *inet = inet_sk(sk);
struct rtable *rt = skb_rtable(skb);
struct iphdr *iph;
/* Build the IP header. */
- skb_push(skb, sizeof(struct iphdr) + (opt ? opt->optlen : 0));
+ skb_push(skb, sizeof(struct iphdr) + (opt ? opt->opt.optlen : 0));
skb_reset_network_header(skb);
iph = ip_hdr(skb);
iph->version = 4;
@@ -161,9 +161,9 @@ int ip_build_and_send_pkt(struct sk_buff *skb, struct sock *sk,
iph->protocol = sk->sk_protocol;
ip_select_ident(iph, &rt->u.dst, sk);
- if (opt && opt->optlen) {
- iph->ihl += opt->optlen>>2;
- ip_options_build(skb, opt, daddr, rt, 0);
+ if (opt && opt->opt.optlen) {
+ iph->ihl += opt->opt.optlen>>2;
+ ip_options_build(skb, &opt->opt, daddr, rt, 0);
}
skb->priority = sk->sk_priority;
@@ -315,9 +315,10 @@ int ip_queue_xmit(struct sk_buff *skb, int ipfragok)
{
struct sock *sk = skb->sk;
struct inet_sock *inet = inet_sk(sk);
- struct ip_options *opt = inet->opt;
+ struct ip_options_rcu *inet_opt = NULL;
struct rtable *rt;
struct iphdr *iph;
+ int res;
/* Skip all of this if the packet is already routed,
* f.e. by something like SCTP.
@@ -328,13 +329,15 @@ int ip_queue_xmit(struct sk_buff *skb, int ipfragok)
/* Make sure we can route this packet. */
rt = (struct rtable *)__sk_dst_check(sk, 0);
+ rcu_read_lock();
+ inet_opt = rcu_dereference(inet->inet_opt);
if (rt == NULL) {
__be32 daddr;
/* Use correct destination address if we have options. */
daddr = inet->inet_daddr;
- if(opt && opt->srr)
- daddr = opt->faddr;
+ if (inet_opt && inet_opt->opt.srr)
+ daddr = inet_opt->opt.faddr;
{
struct flowi fl = { .oif = sk->sk_bound_dev_if,
@@ -362,11 +365,11 @@ int ip_queue_xmit(struct sk_buff *skb, int ipfragok)
skb_dst_set(skb, dst_clone(&rt->u.dst));
packet_routed:
- if (opt && opt->is_strictroute && rt->rt_dst != rt->rt_gateway)
+ if (inet_opt && inet_opt->opt.is_strictroute && rt->rt_dst != rt->rt_gateway)
goto no_route;
/* OK, we know where to send it, allocate and build IP header. */
- skb_push(skb, sizeof(struct iphdr) + (opt ? opt->optlen : 0));
+ skb_push(skb, sizeof(struct iphdr) + (inet_opt ? inet_opt->opt.optlen : 0));
skb_reset_network_header(skb);
iph = ip_hdr(skb);
*((__be16 *)iph) = htons((4 << 12) | (5 << 8) | (inet->tos & 0xff));
@@ -380,9 +383,9 @@ packet_routed:
iph->daddr = rt->rt_dst;
/* Transport layer set skb->h.foo itself. */
- if (opt && opt->optlen) {
- iph->ihl += opt->optlen >> 2;
- ip_options_build(skb, opt, inet->inet_daddr, rt, 0);
+ if (inet_opt && inet_opt->opt.optlen) {
+ iph->ihl += inet_opt->opt.optlen >> 2;
+ ip_options_build(skb, &inet_opt->opt, inet->inet_daddr, rt, 0);
}
ip_select_ident_more(iph, &rt->u.dst, sk,
@@ -390,10 +393,12 @@ packet_routed:
skb->priority = sk->sk_priority;
skb->mark = sk->sk_mark;
-
- return ip_local_out(skb);
+ res = ip_local_out(skb);
+ rcu_read_unlock();
+ return res;
no_route:
+ rcu_read_unlock();
IP_INC_STATS(sock_net(sk), IPSTATS_MIB_OUTNOROUTES);
kfree_skb(skb);
return -EHOSTUNREACH;
@@ -812,7 +817,7 @@ int ip_append_data(struct sock *sk,
/*
* setup for corking.
*/
- opt = ipc->opt;
+ opt = ipc->opt ? &ipc->opt->opt : NULL;
if (opt) {
if (inet->cork.opt == NULL) {
inet->cork.opt = kmalloc(sizeof(struct ip_options) + 40, sk->sk_allocation);
@@ -1371,26 +1376,23 @@ void ip_send_reply(struct sock *sk, struct sk_buff *skb, struct ip_reply_arg *ar
unsigned int len)
{
struct inet_sock *inet = inet_sk(sk);
- struct {
- struct ip_options opt;
- char data[40];
- } replyopts;
+ struct ip_options_data replyopts;
struct ipcm_cookie ipc;
__be32 daddr;
struct rtable *rt = skb_rtable(skb);
- if (ip_options_echo(&replyopts.opt, skb))
+ if (ip_options_echo(&replyopts.opt.opt, skb))
return;
daddr = ipc.addr = rt->rt_src;
ipc.opt = NULL;
ipc.shtx.flags = 0;
- if (replyopts.opt.optlen) {
+ if (replyopts.opt.opt.optlen) {
ipc.opt = &replyopts.opt;
- if (ipc.opt->srr)
- daddr = replyopts.opt.faddr;
+ if (replyopts.opt.opt.srr)
+ daddr = replyopts.opt.opt.faddr;
}
{
diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c
index 1e64dabbd232..e4256fe59a30 100644
--- a/net/ipv4/ip_sockglue.c
+++ b/net/ipv4/ip_sockglue.c
@@ -435,6 +435,11 @@ out:
}
+static void opt_kfree_rcu(struct rcu_head *head)
+{
+ kfree(container_of(head, struct ip_options_rcu, rcu));
+}
+
/*
* Socket option code for IP. This is the end of the line after any
* TCP,UDP etc options on an IP socket.
@@ -481,13 +486,15 @@ static int do_ip_setsockopt(struct sock *sk, int level,
switch (optname) {
case IP_OPTIONS:
{
- struct ip_options *opt = NULL;
+ struct ip_options_rcu *old, *opt = NULL;
+
if (optlen > 40)
goto e_inval;
err = ip_options_get_from_user(sock_net(sk), &opt,
optval, optlen);
if (err)
break;
+ old = inet->inet_opt;
if (inet->is_icsk) {
struct inet_connection_sock *icsk = inet_csk(sk);
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
@@ -496,17 +503,18 @@ static int do_ip_setsockopt(struct sock *sk, int level,
(TCPF_LISTEN | TCPF_CLOSE)) &&
inet->inet_daddr != LOOPBACK4_IPV6)) {
#endif
- if (inet->opt)
- icsk->icsk_ext_hdr_len -= inet->opt->optlen;
+ if (old)
+ icsk->icsk_ext_hdr_len -= old->opt.optlen;
if (opt)
- icsk->icsk_ext_hdr_len += opt->optlen;
+ icsk->icsk_ext_hdr_len += opt->opt.optlen;
icsk->icsk_sync_mss(sk, icsk->icsk_pmtu_cookie);
#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
}
#endif
}
- opt = xchg(&inet->opt, opt);
- kfree(opt);
+ rcu_assign_pointer(inet->inet_opt, opt);
+ if (old)
+ call_rcu(&old->rcu, opt_kfree_rcu);
break;
}
case IP_PKTINFO:
@@ -1042,12 +1050,15 @@ static int do_ip_getsockopt(struct sock *sk, int level, int optname,
case IP_OPTIONS:
{
unsigned char optbuf[sizeof(struct ip_options)+40];
- struct ip_options * opt = (struct ip_options *)optbuf;
+ struct ip_options *opt = (struct ip_options *)optbuf;
+ struct ip_options_rcu *inet_opt;
+
+ inet_opt = inet->inet_opt;
opt->optlen = 0;
- if (inet->opt)
- memcpy(optbuf, inet->opt,
- sizeof(struct ip_options)+
- inet->opt->optlen);
+ if (inet_opt)
+ memcpy(optbuf, &inet_opt->opt,
+ sizeof(struct ip_options) +
+ inet_opt->opt.optlen);
release_sock(sk);
if (opt->optlen == 0)
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c
index cc6f097fbd5f..d5f57acd6f4b 100644
--- a/net/ipv4/raw.c
+++ b/net/ipv4/raw.c
@@ -457,6 +457,7 @@ static int raw_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
__be32 saddr;
u8 tos;
int err;
+ struct ip_options_data opt_copy;
err = -EMSGSIZE;
if (len > 0xFFFF)
@@ -517,8 +518,18 @@ static int raw_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
saddr = ipc.addr;
ipc.addr = daddr;
- if (!ipc.opt)
- ipc.opt = inet->opt;
+ if (!ipc.opt) {
+ struct ip_options_rcu *inet_opt;
+
+ rcu_read_lock();
+ inet_opt = rcu_dereference(inet->inet_opt);
+ if (inet_opt) {
+ memcpy(&opt_copy, inet_opt,
+ sizeof(*inet_opt) + inet_opt->opt.optlen);
+ ipc.opt = &opt_copy.opt;
+ }
+ rcu_read_unlock();
+ }
if (ipc.opt) {
err = -EINVAL;
@@ -527,10 +538,10 @@ static int raw_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
*/
if (inet->hdrincl)
goto done;
- if (ipc.opt->srr) {
+ if (ipc.opt->opt.srr) {
if (!daddr)
goto done;
- daddr = ipc.opt->faddr;
+ daddr = ipc.opt->opt.faddr;
}
}
tos = RT_CONN_FLAGS(sk);
diff --git a/net/ipv4/syncookies.c b/net/ipv4/syncookies.c
index 9f6b22206c52..95ac6d7e0f42 100644
--- a/net/ipv4/syncookies.c
+++ b/net/ipv4/syncookies.c
@@ -310,10 +310,10 @@ struct sock *cookie_v4_check(struct sock *sk, struct sk_buff *skb,
* the ACK carries the same options again (see RFC1122 4.2.3.8)
*/
if (opt && opt->optlen) {
- int opt_size = sizeof(struct ip_options) + opt->optlen;
+ int opt_size = sizeof(struct ip_options_rcu) + opt->optlen;
ireq->opt = kmalloc(opt_size, GFP_ATOMIC);
- if (ireq->opt != NULL && ip_options_echo(ireq->opt, skb)) {
+ if (ireq->opt != NULL && ip_options_echo(&ireq->opt->opt, skb)) {
kfree(ireq->opt);
ireq->opt = NULL;
}
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index ab7165565d23..8a0bff623731 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -153,6 +153,7 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
__be32 daddr, nexthop;
int tmp;
int err;
+ struct ip_options_rcu *inet_opt;
if (addr_len < sizeof(struct sockaddr_in))
return -EINVAL;
@@ -161,10 +162,11 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
return -EAFNOSUPPORT;
nexthop = daddr = usin->sin_addr.s_addr;
- if (inet->opt && inet->opt->srr) {
+ inet_opt = inet->inet_opt;
+ if (inet_opt && inet_opt->opt.srr) {
if (!daddr)
return -EINVAL;
- nexthop = inet->opt->faddr;
+ nexthop = inet_opt->opt.faddr;
}
tmp = ip_route_connect(&rt, nexthop, inet->inet_saddr,
@@ -182,7 +184,7 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
return -ENETUNREACH;
}
- if (!inet->opt || !inet->opt->srr)
+ if (!inet_opt || !inet_opt->opt.srr)
daddr = rt->rt_dst;
if (!inet->inet_saddr)
@@ -216,8 +218,8 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)
inet->inet_daddr = daddr;
inet_csk(sk)->icsk_ext_hdr_len = 0;
- if (inet->opt)
- inet_csk(sk)->icsk_ext_hdr_len = inet->opt->optlen;
+ if (inet_opt)
+ inet_csk(sk)->icsk_ext_hdr_len = inet_opt->opt.optlen;
tp->rx_opt.mss_clamp = TCP_MSS_DEFAULT;
@@ -812,17 +814,18 @@ static void syn_flood_warning(struct sk_buff *skb)
/*
* Save and compile IPv4 options into the request_sock if needed.
*/
-static struct ip_options *tcp_v4_save_options(struct sock *sk,
- struct sk_buff *skb)
+static struct ip_options_rcu *tcp_v4_save_options(struct sock *sk,
+ struct sk_buff *skb)
{
- struct ip_options *opt = &(IPCB(skb)->opt);
- struct ip_options *dopt = NULL;
+ const struct ip_options *opt = &(IPCB(skb)->opt);
+ struct ip_options_rcu *dopt = NULL;
if (opt && opt->optlen) {
- int opt_size = optlength(opt);
+ int opt_size = sizeof(*dopt) + opt->optlen;
+
dopt = kmalloc(opt_size, GFP_ATOMIC);
if (dopt) {
- if (ip_options_echo(dopt, skb)) {
+ if (ip_options_echo(&dopt->opt, skb)) {
kfree(dopt);
dopt = NULL;
}
@@ -1412,6 +1415,7 @@ struct sock *tcp_v4_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
#ifdef CONFIG_TCP_MD5SIG
struct tcp_md5sig_key *key;
#endif
+ struct ip_options_rcu *inet_opt;
if (sk_acceptq_is_full(sk))
goto exit_overflow;
@@ -1432,13 +1436,14 @@ struct sock *tcp_v4_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
newinet->inet_daddr = ireq->rmt_addr;
newinet->inet_rcv_saddr = ireq->loc_addr;
newinet->inet_saddr = ireq->loc_addr;
- newinet->opt = ireq->opt;
+ inet_opt = ireq->opt;
+ rcu_assign_pointer(newinet->inet_opt, inet_opt);
ireq->opt = NULL;
newinet->mc_index = inet_iif(skb);
newinet->mc_ttl = ip_hdr(skb)->ttl;
inet_csk(newsk)->icsk_ext_hdr_len = 0;
- if (newinet->opt)
- inet_csk(newsk)->icsk_ext_hdr_len = newinet->opt->optlen;
+ if (inet_opt)
+ inet_csk(newsk)->icsk_ext_hdr_len = inet_opt->opt.optlen;
newinet->inet_id = newtp->write_seq ^ jiffies;
tcp_mtup_init(newsk);
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index 7932dc68c669..7f0a1ae0544b 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -784,6 +784,7 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
int err, is_udplite = IS_UDPLITE(sk);
int corkreq = up->corkflag || msg->msg_flags&MSG_MORE;
int (*getfrag)(void *, char *, int, int, int, struct sk_buff *);
+ struct ip_options_data opt_copy;
if (len > 0xFFFF)
return -EMSGSIZE;
@@ -855,22 +856,32 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
free = 1;
connected = 0;
}
- if (!ipc.opt)
- ipc.opt = inet->opt;
+ if (!ipc.opt) {
+ struct ip_options_rcu *inet_opt;
+
+ rcu_read_lock();
+ inet_opt = rcu_dereference(inet->inet_opt);
+ if (inet_opt) {
+ memcpy(&opt_copy, inet_opt,
+ sizeof(*inet_opt) + inet_opt->opt.optlen);
+ ipc.opt = &opt_copy.opt;
+ }
+ rcu_read_unlock();
+ }
saddr = ipc.addr;
ipc.addr = faddr = daddr;
- if (ipc.opt && ipc.opt->srr) {
+ if (ipc.opt && ipc.opt->opt.srr) {
if (!daddr)
return -EINVAL;
- faddr = ipc.opt->faddr;
+ faddr = ipc.opt->opt.faddr;
connected = 0;
}
tos = RT_TOS(inet->tos);
if (sock_flag(sk, SOCK_LOCALROUTE) ||
(msg->msg_flags & MSG_DONTROUTE) ||
- (ipc.opt && ipc.opt->is_strictroute)) {
+ (ipc.opt && ipc.opt->opt.is_strictroute)) {
tos |= RTO_ONLINK;
connected = 0;
}
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c
index d854453b4daa..138a2db58bf8 100644
--- a/net/ipv6/tcp_ipv6.c
+++ b/net/ipv6/tcp_ipv6.c
@@ -1446,7 +1446,7 @@ static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb,
First: no IPv4 options.
*/
- newinet->opt = NULL;
+ newinet->inet_opt = NULL;
newnp->ipv6_fl_list = NULL;
/* Clone RX bits */
--
1.8.5.2
next prev parent reply other threads:[~2014-02-05 21:09 UTC|newest]
Thread overview: 218+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-05 19:59 [v2.6.34-stable 000/213] v2.6.34.15 longterm review Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 001/213] x86, random: make ARCH_RANDOM prompt if EMBEDDED, not EXPERT Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 002/213] udf: fix udf_error build warnings Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 003/213] Revert "percpu: fix chunk range calculation" Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 004/213] crypto: ghash - Avoid null pointer dereference if no key is set Paul Gortmaker
2014-02-05 20:30 ` Nick Bowler
2014-02-05 20:38 ` Paul Gortmaker
2014-02-05 19:59 ` Paul Gortmaker [this message]
2014-02-05 19:59 ` [v2.6.34-stable 006/213] inotify: fix double free/corruption of stuct user Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 007/213] KVM: unmap pages from the iommu when slots are removed Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 008/213] KVM: lock slots_lock around device assignment Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 009/213] bridge: Fix mglist corruption that leads to memory corruption Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 010/213] block: add and use scsi_blk_cmd_ioctl Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 011/213] block: fail SCSI passthrough ioctls on partition devices Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 012/213] dm: do not forward ioctls from logical volumes to the underlying device Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 013/213] libceph: Fix NULL pointer dereference in auth client code Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 014/213] ipv6: call udp_push_pending_frames when uncorking a socket with AF_INET pending data Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 015/213] jbd/jbd2: validate sb->s_first in journal_get_superblock() Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 016/213] crypto: ansi_cprng - Fix off by one error in non-block size request Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 017/213] HID: validate HID report id size Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 018/213] HID: pantherlord: validate output report details Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 019/213] HID: provide a helper for validating hid reports Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 020/213] HID: zeroplus: validate output report details Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 021/213] HID: LG: validate HID " Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 022/213] rose: fix info leak via msg_name in rose_recvmsg() Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 023/213] rds: set correct msg_namelen Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 024/213] llc: fix info leak via getsockname() Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 025/213] llc: Fix missing msg_namelen update in llc_ui_recvmsg() Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 026/213] iucv: Fix missing msg_namelen update in iucv_sock_recvmsg() Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 027/213] isdnloop: fix and simplify isdnloop_init() Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 028/213] ax25: fix info leak via msg_name in ax25_recvmsg() Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 029/213] atm: fix info leak in getsockopt(SO_ATMPVC) Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 030/213] atm: fix info leak via getsockname() Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 031/213] atm: update msg_namelen in vcc_recvmsg() Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 032/213] ipvs: fix info leak in getsockopt(IP_VS_SO_GET_TIMEOUT) Paul Gortmaker
2014-02-05 20:36 ` Julian Anastasov
2014-02-05 20:58 ` Julian Anastasov
2014-02-05 19:59 ` [v2.6.34-stable 033/213] netfilter: nf_ct_ipv4: packets with wrong ihl are invalid Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 034/213] net: sctp: sctp_auth_key_put: use kzfree instead of kfree Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 035/213] net: sctp: sctp_endpoint_free: zero out secret key data Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 036/213] net: sctp: sctp_setsockopt_auth_key: use kzfree instead of kfree Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 037/213] sctp: fix memory leak in sctp_datamsg_from_user() when copy from user space fails Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 038/213] unix: fix a race condition in unix_release() Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 039/213] tcp: allow splice() to build full TSO packets Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 040/213] tcp: tcp_sendpages() should call tcp_push() once Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 041/213] tcp: fix MSG_SENDPAGE_NOTLAST logic Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 042/213] tcp: preserve ACK clocking in TSO Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 043/213] net: fix info leak in compat dev_ifconf() Paul Gortmaker
2014-02-05 19:59 ` [v2.6.34-stable 044/213] net: guard tcp_set_keepalive() to tcp sockets Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 045/213] net: fix divide by zero in tcp algorithm illinois Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 046/213] net: prevent setting ttl=0 via IP_TTL Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 047/213] net: sched: integer overflow fix Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 048/213] net_sched: gact: Fix potential panic in tcf_gact() Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 049/213] bridge: set priority of STP packets Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 050/213] af_packet: remove BUG statement in tpacket_destruct_skb Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 051/213] netem: fix possible skb leak Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 052/213] net_sched: gred: Fix oops in gred_dump() in WRED mode Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 053/213] net: fix a race in sock_queue_err_skb() Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 054/213] netlink: wake up netlink listeners sooner (v2) Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 055/213] netlink: fix races after skb queueing Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 056/213] softirq: reduce latencies Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 057/213] net: reduce net_rx_action() latency to 2 HZ Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 058/213] net/core: Fix potential memory leak in dev_set_alias() Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 059/213] net/tun: fix ioctl() based info leaks Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 060/213] tun: Fix formatting Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 061/213] tcp: perform DMA to userspace only if there is a task waiting for it Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 062/213] tcp: drop SYN+FIN messages Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 063/213] tcp: do_tcp_sendpages() must try to push data out on oom conditions Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 064/213] drop_monitor: fix sleeping in invalid context warning Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 065/213] drop_monitor: Make updating data->skb smp safe Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 066/213] drop_monitor: prevent init path from scheduling on the wrong cpu Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 067/213] drop_monitor: dont sleep in atomic context Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 068/213] xfrm_user: fix info leak in copy_to_user_state() Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 069/213] xfrm_user: fix info leak in copy_to_user_policy() Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 070/213] xfrm_user: fix info leak in copy_to_user_tmpl() Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 071/213] xfrm_user: return error pointer instead of NULL Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 072/213] xfrm_user: return error pointer instead of NULL #2 Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 073/213] b43legacy: Fix crash on unload when firmware not available Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 074/213] tg3: Avoid null pointer dereference in tg3_interrupt in netconsole mode Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 075/213] nfsd4: fix oops on unusual readlike compound Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 076/213] NFSv3: Ensure that do_proc_get_root() reports errors correctly Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 077/213] NFSv4: Revalidate uid/gid after open Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 078/213] kernel panic when mount NFSv4 Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 079/213] hfsplus: fix potential overflow in hfsplus_file_truncate() Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 080/213] clockevents: Don't allow dummy broadcast timers Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 081/213] posix-cpu-timers: Fix nanosleep task_struct leak Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 082/213] timer: Don't reinitialize the cpu base lock during CPU_UP_PREPARE Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 083/213] tick: Cleanup NOHZ per cpu data on cpu down Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 084/213] gen_init_cpio: avoid stack overflow when expanding Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 085/213] exec: do not leave bprm->interp on stack Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 086/213] exec: use -ELOOP for max recursion depth Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 087/213] ptrace: ptrace_resume() shouldn't wake up !TASK_TRACED thread Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 088/213] kernel/signal.c: stop info leak via the tkill and the tgkill syscalls Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 089/213] wake_up_process() should be never used to wakeup a TASK_STOPPED/TRACED task Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 090/213] coredump: prevent double-free on an error path in core dumper Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 091/213] kernel/sys.c: call disable_nonboot_cpus() in kernel_restart() Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 092/213] kernel/resource.c: fix stack overflow in __reserve_region_with_split() Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 093/213] Driver core: treat unregistered bus_types as having no devices Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 094/213] cgroup: remove incorrect dget/dput() pair in cgroup_create_dir() Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 095/213] Fix a dead loop in async_synchronize_full() Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 096/213] Prevent interface errors with Seagate FreeAgent GoFlex Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 097/213] tracing: Don't call page_to_pfn() if page is NULL Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 098/213] tracing: Fix double free when function profile init failed Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 099/213] hugetlb: fix resv_map leak in error path Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 100/213] mm: fix vma_resv_map() NULL pointer Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 101/213] mm: Fix PageHead when !CONFIG_PAGEFLAGS_EXTENDED Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 102/213] mm: bugfix: set current->reclaim_state to NULL while returning from kswapd() Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 103/213] mm: fix invalidate_complete_page2() lock ordering Paul Gortmaker
2014-02-05 20:00 ` [v2.6.34-stable 104/213] mm: mmu_notifier: fix freed page still mapped in secondary MMU Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 105/213] mm: Hold a file reference in madvise_remove Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 106/213] mempolicy: fix a race in shared_policy_replace() Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 107/213] ALSA: seq: Fix missing error handling in snd_seq_timer_open() Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 108/213] x86/xen: don't assume %ds is usable in xen_iret for 32-bit PVOPS Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 109/213] x86/msr: Add capabilities check Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 110/213] x86, tls: Off by one limit check Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 111/213] x86/mm: Check if PUD is large when validating a kernel address Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 112/213] x86, mm, paravirt: Fix vmalloc_fault oops during lazy MMU updates Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 113/213] xen/bootup: allow read_tscp call for Xen PV guests Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 114/213] xen/bootup: allow {read|write}_cr8 pvops call Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 115/213] KVM: x86: fix for buffer overflow in handling of MSR_KVM_SYSTEM_TIME (CVE-2013-1796) Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 116/213] KVM: Fix bounds checking in ioapic indirect register reads (CVE-2013-1798) Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 117/213] MCE: Fix vm86 handling for 32bit mce handler Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 118/213] ACPI / cpuidle: Fix NULL pointer issues when cpuidle is disabled Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 119/213] serial: 8250, increase PASS_LIMIT Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 120/213] drivers/char/ipmi: memcpy, need additional 2 bytes to avoid memory overflow Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 121/213] w1: fix oops when w1_search is called from netlink connector Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 122/213] fix Null pointer dereference on disk error Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 123/213] fix crash in scsi_dispatch_cmd() Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 124/213] bnx2i: Fixed NULL ptr deference for 1G bnx2 Linux iSCSI offload Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 125/213] keys: fix race with concurrent install_user_keyrings() Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 126/213] crypto: cryptd - disable softirqs in cryptd_queue_worker to prevent data corruption Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 127/213] IPoIB: Fix use-after-free of multicast object Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 128/213] Bluetooth: Fix incorrect strncpy() in hidp_setup_hid() Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 129/213] Bluetooth: HCI - Fix info leak in getsockopt(HCI_FILTER) Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 130/213] Bluetooth: RFCOMM - Fix info leak via getsockname() Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 131/213] Bluetooth: RFCOMM - Fix missing msg_namelen update in rfcomm_sock_recvmsg() Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 132/213] Bluetooth: L2CAP - Fix info leak via getsockname() Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 133/213] Bluetooth: fix possible info leak in bt_sock_recvmsg() Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 134/213] Bluetooth: add NULL pointer check in HCI Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 135/213] Bluetooth: hci_ldisc: fix NULL-pointer dereference on tty_close Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 136/213] xhci: Make handover code more robust Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 137/213] xhci: Increase reset timeout for Renesas 720201 host Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 138/213] xhci: Reset reserved command ring TRBs on cleanup Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 139/213] xHCI: Correct the #define XHCI_LEGACY_DISABLE_SMI Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 140/213] xhci: Don't write zeroed pointers to xHC registers Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 141/213] USB: EHCI: go back to using the system clock for QH unlinks Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 142/213] USB: whiteheat: fix memory leak in error path Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 143/213] USB: serial: Fix memory leak in sierra_release() Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 144/213] USB: mos7840: fix urb leak at release Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 145/213] USB: mos7840: fix port-device leak in error path Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 146/213] USB: garmin_gps: fix memory leak on disconnect Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 147/213] USB: io_ti: Fix NULL dereference in chase_port() Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 148/213] USB: cdc-wdm: fix buffer overflow Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 149/213] USB: serial: ftdi_sio: Handle the old_termios == 0 case e.g. uart_resume_port() Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 150/213] USB: CDC ACM: Fix NULL pointer dereference Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 151/213] usb: serial: mos7840: Fixup mos7840_chars_in_buffer() Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 152/213] USB: echi-dbgp: increase the controller wait time to come out of halt Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 153/213] USB: kaweth.c: use GFP_ATOMIC under spin_lock Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 154/213] USB: cdc-wdm: fix lockup on error in wdm_read Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 155/213] USB: serial: fix race between probe and open Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 156/213] usbdevfs: Correct amount of data copied to user in processcompl_compat Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 157/213] epoll: prevent missed events on EPOLL_CTL_MOD Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 158/213] fs/compat_ioctl.c: VIDEO_SET_SPU_PALETTE missing error check Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 159/213] fs/fscache/stats.c: fix memory leak Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 160/213] sysfs: sysfs_pathname/sysfs_add_one: Use strlcat() instead of strcat() Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 161/213] tmpfs: fix use-after-free of mempolicy object Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 162/213] fs/cifs/cifs_dfs_ref.c: fix potential memory leakage Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 163/213] isofs: avoid info leak on export Paul Gortmaker
2014-02-05 20:01 ` [v2.6.34-stable 164/213] jbd: Fix assertion failure in commit code due to lacking transaction credits Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 165/213] jbd: Fix lock ordering bug in journal_unmap_buffer() Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 166/213] jbd2: clear BH_Delay & BH_Unwritten in journal_unmap_buffer Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 167/213] ecryptfs: call vfs_setxattr() in ecryptfs_setxattr() Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 168/213] eCryptfs: Copy up lower inode attrs after setting lower xattr Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 169/213] ext3: Fix fdatasync() for files with only i_size changes Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 170/213] ext3: Fix error handling on inode bitmap corruption Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 171/213] ext4: don't let i_reserved_meta_blocks go negative Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 172/213] ext4: Fix fs corruption when make_indexed_dir() fails Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 173/213] ext4: don't dereference null pointer " Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 174/213] ext4: fix memory leak in ext4_xattr_set_acl()'s error path Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 175/213] ext4: online defrag is not supported for journaled files Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 176/213] ext4: always set i_op in ext4_mknod() Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 177/213] ext4: fix fdatasync() for files with only i_size changes Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 178/213] ext4: lock i_mutex when truncating orphan inodes Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 179/213] ext4: fix race in ext4_mb_add_n_trim() Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 180/213] ext4: limit group search loop for non-extent files Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 181/213] ext4: make orphan functions be no-op in no-journal mode Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 182/213] ext4: avoid hang when mounting non-journal filesystems with orphan list Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 183/213] ext4: fix error handling on inode bitmap corruption Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 184/213] btrfs: use rcu_barrier() to wait for bdev puts at unmount Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 185/213] Btrfs: call the ordered free operation without any locks held Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 186/213] udf: fix memory leak while allocating blocks during write Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 187/213] udf: avoid info leak on export Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 188/213] udf: Fix bitmap overflow on large filesystems with small block size Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 189/213] udf: Fix data corruption for files in ICB Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 190/213] udf: fix retun value on error path in udf_load_logicalvol Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 191/213] Fix install_process_keyring error handling Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 192/213] mtd: cafe_nand: fix an & vs | mistake Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 193/213] dccp: check ccid before dereferencing Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 194/213] Remove user-triggerable BUG from mpol_to_str Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 195/213] svcrpc: sends on closed socket should stop immediately Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 196/213] svcrpc: fix svc_xprt_enqueue/svc_recv busy-looping Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 197/213] vfs: missed source of ->f_pos races Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 198/213] fuse: verify all ioctl retry iov elements Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 199/213] pcdp: use early_ioremap/early_iounmap to access pcdp table Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 200/213] futex: Forbid uaddr == uaddr2 in futex_wait_requeue_pi() Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 201/213] futex: Fix bug in WARN_ON for NULL q.pi_state Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 202/213] futex: Test for pi_mutex on fault in futex_wait_requeue_pi() Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 203/213] cipso: don't follow a NULL pointer when setsockopt() is called Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 204/213] Avoid dangling pointer in scsi_requeue_command() Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 205/213] libsas: continue revalidation Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 206/213] SCSI: libsas: fix sas_discover_devices return code handling Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 207/213] fix eh wakeup (scsi_schedule_eh vs scsi_restart_operations) Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 208/213] eCryptfs: Properly check for O_RDONLY flag before doing privileged open Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 209/213] fuse: fix stat call on 32 bit platforms Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 210/213] phonet: Check input from user before allocating Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 211/213] PCI: Add quirk for still enabled interrupts on Intel Sandy Bridge GPUs Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 212/213] crypto: sha512 - Fix byte counter overflow in SHA-512 Paul Gortmaker
2014-02-05 20:02 ` [v2.6.34-stable 213/213] video:uvesafb: Fix oops that uvesafb try to execute NX-protected page Paul Gortmaker
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1391630568-49251-6-git-send-email-paul.gortmaker@windriver.com \
--to=paul.gortmaker@windriver.com \
--cc=ben@decadent.org.uk \
--cc=davem@davemloft.net \
--cc=eric.dumazet@gmail.com \
--cc=herbert@gondor.apana.org.au \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=w@1wt.eu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®