Skip to content

Commit afbc293

Browse files
Cong Wangklassert
authored andcommitted
af_key: relax availability checks for skb size calculation
xfrm_probe_algs() probes kernel crypto modules and changes the availability of struct xfrm_algo_desc. But there is a small window where ealg->available and aalg->available get changed between count_ah_combs()/count_esp_combs() and dump_ah_combs()/dump_esp_combs(), in this case we may allocate a smaller skb but later put a larger amount of data and trigger the panic in skb_put(). Fix this by relaxing the checks when counting the size, that is, skipping the test of ->available. We may waste some memory for a few of sizeof(struct sadb_comb), but it is still much better than a panic. Reported-by: [email protected] Cc: Steffen Klassert <[email protected]> Cc: Herbert Xu <[email protected]> Signed-off-by: Cong Wang <[email protected]> Signed-off-by: Steffen Klassert <[email protected]>
1 parent 9f8550e commit afbc293

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

net/key/af_key.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2902,7 +2902,7 @@ static int count_ah_combs(const struct xfrm_tmpl *t)
29022902
break;
29032903
if (!aalg->pfkey_supported)
29042904
continue;
2905-
if (aalg_tmpl_set(t, aalg) && aalg->available)
2905+
if (aalg_tmpl_set(t, aalg))
29062906
sz += sizeof(struct sadb_comb);
29072907
}
29082908
return sz + sizeof(struct sadb_prop);
@@ -2920,7 +2920,7 @@ static int count_esp_combs(const struct xfrm_tmpl *t)
29202920
if (!ealg->pfkey_supported)
29212921
continue;
29222922

2923-
if (!(ealg_tmpl_set(t, ealg) && ealg->available))
2923+
if (!(ealg_tmpl_set(t, ealg)))
29242924
continue;
29252925

29262926
for (k = 1; ; k++) {
@@ -2931,7 +2931,7 @@ static int count_esp_combs(const struct xfrm_tmpl *t)
29312931
if (!aalg->pfkey_supported)
29322932
continue;
29332933

2934-
if (aalg_tmpl_set(t, aalg) && aalg->available)
2934+
if (aalg_tmpl_set(t, aalg))
29352935
sz += sizeof(struct sadb_comb);
29362936
}
29372937
}

0 commit comments

Comments
 (0)