diff options
author | ae <ae@FreeBSD.org> | 2010-07-23 06:30:01 +0000 |
---|---|---|
committer | ae <ae@FreeBSD.org> | 2010-07-23 06:30:01 +0000 |
commit | 6c308fec858ce130eceb0bbe485ab8b6252bc548 (patch) | |
tree | 9a7bdc7b192337da049b4fb59be0a2d7f785a716 /sys/geom | |
parent | db407a02da63b59d3fd78135076c38541d36d751 (diff) | |
download | FreeBSD-src-6c308fec858ce130eceb0bbe485ab8b6252bc548.zip FreeBSD-src-6c308fec858ce130eceb0bbe485ab8b6252bc548.tar.gz |
Prevent access after free to table entry in case when
user deletes partition that not yet created (changes doesn't
committed to disk).
PR: 148687
Approved by: mav (mentor)
MFC after: 7 days
Diffstat (limited to 'sys/geom')
-rw-r--r-- | sys/geom/part/g_part.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/sys/geom/part/g_part.c b/sys/geom/part/g_part.c index a7eebc6..98ec702 100644 --- a/sys/geom/part/g_part.c +++ b/sys/geom/part/g_part.c @@ -830,14 +830,6 @@ g_part_ctl_delete(struct gctl_req *req, struct g_part_parms *gpp) entry->gpe_pp = NULL; } - if (entry->gpe_created) { - LIST_REMOVE(entry, gpe_entry); - g_free(entry); - } else { - entry->gpe_modified = 0; - entry->gpe_deleted = 1; - } - if (pp != NULL) g_wither_provider(pp, ENXIO); @@ -850,6 +842,14 @@ g_part_ctl_delete(struct gctl_req *req, struct g_part_parms *gpp) gctl_set_param(req, "output", sbuf_data(sb), sbuf_len(sb) + 1); sbuf_delete(sb); } + + if (entry->gpe_created) { + LIST_REMOVE(entry, gpe_entry); + g_free(entry); + } else { + entry->gpe_modified = 0; + entry->gpe_deleted = 1; + } return (0); } |