Commit 733c99ee authored by 王贇's avatar 王贇 Committed by David S. Miller
Browse files

net: fix NULL pointer reference in cipso_v4_doi_free



In netlbl_cipsov4_add_std() when 'doi_def->map.std' alloc
failed, we sometime observe panic:

  BUG: kernel NULL pointer dereference, address:
  ...
  RIP: 0010:cipso_v4_doi_free+0x3a/0x80
  ...
  Call Trace:
   netlbl_cipsov4_add_std+0xf4/0x8c0
   netlbl_cipsov4_add+0x13f/0x1b0
   genl_family_rcv_msg_doit.isra.15+0x132/0x170
   genl_rcv_msg+0x125/0x240

This is because in cipso_v4_doi_free() there is no check
on 'doi_def->map.std' when 'doi_def->type' equal 1, which
is possibe, since netlbl_cipsov4_add_std() haven't initialize
it before alloc 'doi_def->map.std'.

This patch just add the check to prevent panic happen for similar
cases.

Reported-by: default avatarAbaci <abaci@linux.alibaba.com>
Signed-off-by: default avatarMichael Wang <yun.wang@linux.alibaba.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 96a6b93b
Loading
Loading
Loading
Loading
+10 −8
Original line number Diff line number Diff line
@@ -465,6 +465,7 @@ void cipso_v4_doi_free(struct cipso_v4_doi *doi_def)
	if (!doi_def)
		return;

	if (doi_def->map.std) {
		switch (doi_def->type) {
		case CIPSO_V4_MAP_TRANS:
			kfree(doi_def->map.std->lvl.cipso);
@@ -474,6 +475,7 @@ void cipso_v4_doi_free(struct cipso_v4_doi *doi_def)
			kfree(doi_def->map.std);
			break;
		}
	}
	kfree(doi_def);
}