提交 b6ee8963 编写于 作者: E Eric Dumazet 提交者: Steffen Klassert

xfrm/compat: prevent potential spectre v1 gadget in xfrm_xlate32_attr()

  int type = nla_type(nla);

  if (type > XFRMA_MAX) {
            return -EOPNOTSUPP;
  }

@type is then used as an array index and can be used
as a Spectre v1 gadget.

  if (nla_len(nla) < compat_policy[type].len) {

array_index_nospec() can be used to prevent leaking
content of kernel memory to malicious users.

Fixes: 5106f4a8 ("xfrm/compat: Add 32=>64-bit messages translator")
Signed-off-by: NEric Dumazet <edumazet@google.com>
Cc: Dmitry Safonov <dima@arista.com>
Cc: Steffen Klassert <steffen.klassert@secunet.com>
Reviewed-by: NDmitry Safonov <dima@arista.com>
Signed-off-by: NSteffen Klassert <steffen.klassert@secunet.com>
上级 eb6c59b7
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
* Based on code and translator idea by: Florian Westphal <fw@strlen.de> * Based on code and translator idea by: Florian Westphal <fw@strlen.de>
*/ */
#include <linux/compat.h> #include <linux/compat.h>
#include <linux/nospec.h>
#include <linux/xfrm.h> #include <linux/xfrm.h>
#include <net/xfrm.h> #include <net/xfrm.h>
...@@ -437,6 +438,7 @@ static int xfrm_xlate32_attr(void *dst, const struct nlattr *nla, ...@@ -437,6 +438,7 @@ static int xfrm_xlate32_attr(void *dst, const struct nlattr *nla,
NL_SET_ERR_MSG(extack, "Bad attribute"); NL_SET_ERR_MSG(extack, "Bad attribute");
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
type = array_index_nospec(type, XFRMA_MAX + 1);
if (nla_len(nla) < compat_policy[type].len) { if (nla_len(nla) < compat_policy[type].len) {
NL_SET_ERR_MSG(extack, "Attribute bad length"); NL_SET_ERR_MSG(extack, "Attribute bad length");
return -EOPNOTSUPP; return -EOPNOTSUPP;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册