未验证 提交 d7ba8395 编写于 作者: O openeuler-ci-bot 提交者: Gitee

!1469 netfilter: nf_tables: prevent OOB access in nft_byteorder_eval

Merge Pull Request from: @ci-robot 
 
PR sync from: Ziyang Xuan <william.xuanziyang@huawei.com>
https://mailweb.openeuler.org/hyperkitty/list/kernel@openeuler.org/message/A46YSUGPFWTYNDQDDIBLVTYQP7CWKM7I/ 
 
https://gitee.com/src-openeuler/kernel/issues/I7ISR1 
 
Link:https://gitee.com/openeuler/kernel/pulls/1469 

Reviewed-by: Yue Haibing <yuehaibing@huawei.com> 
Signed-off-by: Liu YongQiang <liuyongqiang13@huawei.com> 
...@@ -33,11 +33,11 @@ static void nft_byteorder_eval(const struct nft_expr *expr, ...@@ -33,11 +33,11 @@ static void nft_byteorder_eval(const struct nft_expr *expr,
const struct nft_byteorder *priv = nft_expr_priv(expr); const struct nft_byteorder *priv = nft_expr_priv(expr);
u32 *src = &regs->data[priv->sreg]; u32 *src = &regs->data[priv->sreg];
u32 *dst = &regs->data[priv->dreg]; u32 *dst = &regs->data[priv->dreg];
union { u32 u32; u16 u16; } *s, *d; u16 *s16, *d16;
unsigned int i; unsigned int i;
s = (void *)src; s16 = (void *)src;
d = (void *)dst; d16 = (void *)dst;
switch (priv->size) { switch (priv->size) {
case 8: { case 8: {
...@@ -63,11 +63,11 @@ static void nft_byteorder_eval(const struct nft_expr *expr, ...@@ -63,11 +63,11 @@ static void nft_byteorder_eval(const struct nft_expr *expr,
switch (priv->op) { switch (priv->op) {
case NFT_BYTEORDER_NTOH: case NFT_BYTEORDER_NTOH:
for (i = 0; i < priv->len / 4; i++) for (i = 0; i < priv->len / 4; i++)
d[i].u32 = ntohl((__force __be32)s[i].u32); dst[i] = ntohl((__force __be32)src[i]);
break; break;
case NFT_BYTEORDER_HTON: case NFT_BYTEORDER_HTON:
for (i = 0; i < priv->len / 4; i++) for (i = 0; i < priv->len / 4; i++)
d[i].u32 = (__force __u32)htonl(s[i].u32); dst[i] = (__force __u32)htonl(src[i]);
break; break;
} }
break; break;
...@@ -75,11 +75,11 @@ static void nft_byteorder_eval(const struct nft_expr *expr, ...@@ -75,11 +75,11 @@ static void nft_byteorder_eval(const struct nft_expr *expr,
switch (priv->op) { switch (priv->op) {
case NFT_BYTEORDER_NTOH: case NFT_BYTEORDER_NTOH:
for (i = 0; i < priv->len / 2; i++) for (i = 0; i < priv->len / 2; i++)
d[i].u16 = ntohs((__force __be16)s[i].u16); d16[i] = ntohs((__force __be16)s16[i]);
break; break;
case NFT_BYTEORDER_HTON: case NFT_BYTEORDER_HTON:
for (i = 0; i < priv->len / 2; i++) for (i = 0; i < priv->len / 2; i++)
d[i].u16 = (__force __u16)htons(s[i].u16); d16[i] = (__force __u16)htons(s16[i]);
break; break;
} }
break; break;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册