Whamcloud - gitweb
LU-12160 osd-ldiskfs: use-after-free in osd_object_delete() 17/34617/2
authorAlex Zhuravlev <bzzz@whamcloud.com>
Thu, 4 Apr 2019 10:03:28 +0000 (13:03 +0300)
committerOleg Drokin <green@whamcloud.com>
Mon, 15 Apr 2019 16:15:56 +0000 (16:15 +0000)
store a local copy of projid to avoid use-after-free.

Fixes: 39f63cf54c62 ("LU-4017 quota: add setting/getting project id function")

Lustre-change: https://review.whamcloud.com/#/c/34596/
Lustre-commit: 6a4cc98cd1692b14f4598335dcd373ec4f5b5fb2

Change-Id: I60e19de3485cae3df1cc2e8aae6eeed4b5de3a11
Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Signed-off-by: Minh Diep <mdiep@whamcloud.com>
Reviewed-on: https://review.whamcloud.com/34617
Tested-by: Jenkins
Reviewed-by: Gu Zheng <gzheng@ddn.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/osd-ldiskfs/osd_handler.c

index 5c18786..31d8661 100644 (file)
@@ -2093,8 +2093,9 @@ static void osd_object_delete(const struct lu_env *env, struct lu_object *l)
        osd_index_fini(obj);
        if (inode != NULL) {
                struct qsd_instance *qsd = osd_def_qsd(osd_obj2dev(obj));
-               qid_t                uid = i_uid_read(inode);
-               qid_t                gid = i_gid_read(inode);
+               qid_t uid = i_uid_read(inode);
+               qid_t gid = i_gid_read(inode);
+               __u64 projid = i_projid_read(inode);
 
                obj->oo_inode = NULL;
                iput(inode);
@@ -2109,7 +2110,7 @@ static void osd_object_delete(const struct lu_env *env, struct lu_object *l)
                        qi->lqi_id.qid_uid = gid;
                        qsd_op_adjust(env, qsd, &qi->lqi_id, GRPQUOTA);
 
-                       qi->lqi_id.qid_uid = i_projid_read(inode);
+                       qi->lqi_id.qid_uid = projid;
                        qsd_op_adjust(env, qsd, &qi->lqi_id, PRJQUOTA);
                }
        }