ACK: [Yakkety][Xenial][SRU][PATCH 1/1] UBUNTU: SAUCE: (no-up) xfrm: Ignore socket policies when rebuilding hash tables
Tim Gardner
tim.gardner at canonical.com
Fri Aug 19 14:28:37 UTC 2016
On 08/18/2016 02:29 PM, Joseph Salisbury wrote:
> From: Tobias Brunner <tobias at strongswan.org>
>
> BugLink: http://bugs.launchpad.net/bugs/1613787
>
> Whenever thresholds are changed the hash tables are rebuilt. This is
> done by enumerating all policies and hashing and inserting them into
> the right table according to the thresholds and direction.
>
> Because socket policies are also contained in net->xfrm.policy_all but
> no hash tables are defined for their direction (dir + XFRM_POLICY_MAX)
> this causes a NULL or invalid pointer dereference after returning from
> policy_hash_bysel() if the rebuild is done while any socket policies
> are installed.
>
> Since the rebuild after changing thresholds is scheduled this crash
> could even occur if the userland sets thresholds seemingly before
> installing any socket policies.
>
> Fixes: 53c2e285f970 ("xfrm: Do not hash socket policies")
>
> Signed-off-by: Joseph Salisbury <joseph.salisbury at canonical.com>
> ---
> net/xfrm/xfrm_policy.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
> index b5e665b..45f9cf9 100644
> --- a/net/xfrm/xfrm_policy.c
> +++ b/net/xfrm/xfrm_policy.c
> @@ -626,6 +626,10 @@ static void xfrm_hash_rebuild(struct work_struct *work)
>
> /* re-insert all policies by order of creation */
> list_for_each_entry_reverse(policy, &net->xfrm.policy_all, walk.all) {
> + if (xfrm_policy_id2dir(policy->index) >= XFRM_POLICY_MAX) {
> + /* skip socket policies */
> + continue;
> + }
> newpos = NULL;
> chain = policy_hash_bysel(net, &policy->selector,
> policy->family,
>
This is now a cherry-pick from linux-next, commit
6916fb3b10b3cbe3b1f9f5b680675f53e4e299eb ('xfrm: Ignore socket policies
when rebuilding hash tables')
--
Tim Gardner tim.gardner at canonical.com
More information about the kernel-team
mailing list