| From c30bc94758ae2a38a5eb31767c1985c0aae0950b Mon Sep 17 00:00:00 2001 |
| From: Johannes Berg <johannes.berg@intel.com> |
| Date: Thu, 3 Nov 2011 00:07:32 +0000 |
| Subject: netlink: validate NLA_MSECS length |
| |
| From: Johannes Berg <johannes.berg@intel.com> |
| |
| commit c30bc94758ae2a38a5eb31767c1985c0aae0950b upstream. |
| |
| L2TP for example uses NLA_MSECS like this: |
| policy: |
| [L2TP_ATTR_RECV_TIMEOUT] = { .type = NLA_MSECS, }, |
| code: |
| if (info->attrs[L2TP_ATTR_RECV_TIMEOUT]) |
| cfg.reorder_timeout = nla_get_msecs(info->attrs[L2TP_ATTR_RECV_TIMEOUT]); |
| |
| As nla_get_msecs() is essentially nla_get_u64() plus the |
| conversion to a HZ-based value, this will not properly |
| reject attributes from userspace that aren't long enough |
| and might overrun the message. |
| |
| Add NLA_MSECS to the attribute minlen array to check the |
| size properly. |
| |
| Cc: Thomas Graf <tgraf@suug.ch> |
| Signed-off-by: Johannes Berg <johannes.berg@intel.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| lib/nlattr.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/lib/nlattr.c |
| +++ b/lib/nlattr.c |
| @@ -20,6 +20,7 @@ static u16 nla_attr_minlen[NLA_TYPE_MAX+ |
| [NLA_U16] = sizeof(u16), |
| [NLA_U32] = sizeof(u32), |
| [NLA_U64] = sizeof(u64), |
| + [NLA_MSECS] = sizeof(u64), |
| [NLA_NESTED] = NLA_HDRLEN, |
| }; |
| |