mirror of
https://github.com/torvalds/linux.git
synced 2026-05-14 05:42:10 -04:00
netfilter: x_tables: fix pointer leaks to userspace
[ Upstream commit1e98ffea5a] Several netfilter matches and targets put kernel pointers into info objects, but don't set usersize in descriptors. This leads to kernel pointer leaks if a match/target is set and then read back to userspace. Properly set usersize for these matches/targets. Found with manual code inspection. Fixes:ec23189049("xtables: extend matches and targets with .usersize") Signed-off-by: Dmitry Vyukov <dvyukov@google.com> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
2b7cc93682
commit
ad10785a70
@@ -256,6 +256,7 @@ static struct xt_target idletimer_tg __read_mostly = {
|
||||
.family = NFPROTO_UNSPEC,
|
||||
.target = idletimer_tg_target,
|
||||
.targetsize = sizeof(struct idletimer_tg_info),
|
||||
.usersize = offsetof(struct idletimer_tg_info, timer),
|
||||
.checkentry = idletimer_tg_checkentry,
|
||||
.destroy = idletimer_tg_destroy,
|
||||
.me = THIS_MODULE,
|
||||
|
||||
@@ -198,6 +198,7 @@ static struct xt_target led_tg_reg __read_mostly = {
|
||||
.family = NFPROTO_UNSPEC,
|
||||
.target = led_tg,
|
||||
.targetsize = sizeof(struct xt_led_info),
|
||||
.usersize = offsetof(struct xt_led_info, internal_data),
|
||||
.checkentry = led_tg_check,
|
||||
.destroy = led_tg_destroy,
|
||||
.me = THIS_MODULE,
|
||||
|
||||
@@ -193,9 +193,8 @@ static struct xt_match limit_mt_reg __read_mostly = {
|
||||
.compatsize = sizeof(struct compat_xt_rateinfo),
|
||||
.compat_from_user = limit_mt_compat_from_user,
|
||||
.compat_to_user = limit_mt_compat_to_user,
|
||||
#else
|
||||
.usersize = offsetof(struct xt_rateinfo, prev),
|
||||
#endif
|
||||
.usersize = offsetof(struct xt_rateinfo, prev),
|
||||
.me = THIS_MODULE,
|
||||
};
|
||||
|
||||
|
||||
@@ -62,6 +62,7 @@ static struct xt_match nfacct_mt_reg __read_mostly = {
|
||||
.match = nfacct_mt,
|
||||
.destroy = nfacct_mt_destroy,
|
||||
.matchsize = sizeof(struct xt_nfacct_match_info),
|
||||
.usersize = offsetof(struct xt_nfacct_match_info, nfacct),
|
||||
.me = THIS_MODULE,
|
||||
};
|
||||
|
||||
|
||||
@@ -84,6 +84,7 @@ static struct xt_match xt_statistic_mt_reg __read_mostly = {
|
||||
.checkentry = statistic_mt_check,
|
||||
.destroy = statistic_mt_destroy,
|
||||
.matchsize = sizeof(struct xt_statistic_info),
|
||||
.usersize = offsetof(struct xt_statistic_info, master),
|
||||
.me = THIS_MODULE,
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user