[GFS2] possible null pointer dereference fixup
gfs2_alloc_get may fail so we have to check it to prevent NULL pointer dereference. Signed-off-by: Cyrill Gorcunov <gorcunov@gamil.com> Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
This commit is contained in:
Родитель
105284970b
Коммит
182fe5abd8
|
@ -900,6 +900,8 @@ static int do_grow(struct gfs2_inode *ip, u64 size)
|
|||
int error;
|
||||
|
||||
al = gfs2_alloc_get(ip);
|
||||
if (!al)
|
||||
return -ENOMEM;
|
||||
|
||||
error = gfs2_quota_lock(ip, NO_QUOTA_CHANGE, NO_QUOTA_CHANGE);
|
||||
if (error)
|
||||
|
@ -1081,7 +1083,8 @@ static int trunc_dealloc(struct gfs2_inode *ip, u64 size)
|
|||
lblock = (size - 1) >> sdp->sd_sb.sb_bsize_shift;
|
||||
|
||||
find_metapath(sdp, lblock, &mp, ip->i_height);
|
||||
gfs2_alloc_get(ip);
|
||||
if (!gfs2_alloc_get(ip))
|
||||
return -ENOMEM;
|
||||
|
||||
error = gfs2_quota_hold(ip, NO_QUOTA_CHANGE, NO_QUOTA_CHANGE);
|
||||
if (error)
|
||||
|
|
|
@ -1868,11 +1868,14 @@ static int leaf_dealloc(struct gfs2_inode *dip, u32 index, u32 len,
|
|||
if (!ht)
|
||||
return -ENOMEM;
|
||||
|
||||
gfs2_alloc_get(dip);
|
||||
if (!gfs2_alloc_get(dip)) {
|
||||
error = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
|
||||
error = gfs2_quota_hold(dip, NO_QUOTA_CHANGE, NO_QUOTA_CHANGE);
|
||||
if (error)
|
||||
goto out;
|
||||
goto out_put;
|
||||
|
||||
error = gfs2_rindex_hold(sdp, &dip->i_alloc->al_ri_gh);
|
||||
if (error)
|
||||
|
@ -1946,8 +1949,9 @@ out_rlist:
|
|||
gfs2_glock_dq_uninit(&dip->i_alloc->al_ri_gh);
|
||||
out_qs:
|
||||
gfs2_quota_unhold(dip);
|
||||
out:
|
||||
out_put:
|
||||
gfs2_alloc_put(dip);
|
||||
out:
|
||||
kfree(ht);
|
||||
return error;
|
||||
}
|
||||
|
|
|
@ -318,6 +318,8 @@ static int ea_remove_unstuffed(struct gfs2_inode *ip, struct buffer_head *bh,
|
|||
int error;
|
||||
|
||||
al = gfs2_alloc_get(ip);
|
||||
if (!al)
|
||||
return -ENOMEM;
|
||||
|
||||
error = gfs2_quota_hold(ip, NO_QUOTA_CHANGE, NO_QUOTA_CHANGE);
|
||||
if (error)
|
||||
|
@ -681,6 +683,8 @@ static int ea_alloc_skeleton(struct gfs2_inode *ip, struct gfs2_ea_request *er,
|
|||
int error;
|
||||
|
||||
al = gfs2_alloc_get(ip);
|
||||
if (!al)
|
||||
return -ENOMEM;
|
||||
|
||||
error = gfs2_quota_lock(ip, NO_QUOTA_CHANGE, NO_QUOTA_CHANGE);
|
||||
if (error)
|
||||
|
@ -1464,6 +1468,8 @@ int gfs2_ea_dealloc(struct gfs2_inode *ip)
|
|||
int error;
|
||||
|
||||
al = gfs2_alloc_get(ip);
|
||||
if (!al)
|
||||
return -ENOMEM;
|
||||
|
||||
error = gfs2_quota_hold(ip, NO_QUOTA_CHANGE, NO_QUOTA_CHANGE);
|
||||
if (error)
|
||||
|
|
|
@ -351,6 +351,8 @@ int gfs2_dinode_dealloc(struct gfs2_inode *ip)
|
|||
}
|
||||
|
||||
al = gfs2_alloc_get(ip);
|
||||
if (!al)
|
||||
return -ENOMEM;
|
||||
|
||||
error = gfs2_quota_hold(ip, NO_QUOTA_CHANGE, NO_QUOTA_CHANGE);
|
||||
if (error)
|
||||
|
@ -825,7 +827,8 @@ static int make_dinode(struct gfs2_inode *dip, struct gfs2_glock *gl,
|
|||
int error;
|
||||
|
||||
munge_mode_uid_gid(dip, &mode, &uid, &gid);
|
||||
gfs2_alloc_get(dip);
|
||||
if (!gfs2_alloc_get(dip))
|
||||
return -ENOMEM;
|
||||
|
||||
error = gfs2_quota_lock(dip, uid, gid);
|
||||
if (error)
|
||||
|
@ -860,6 +863,8 @@ static int link_dinode(struct gfs2_inode *dip, const struct qstr *name,
|
|||
int error;
|
||||
|
||||
al = gfs2_alloc_get(dip);
|
||||
if (!al)
|
||||
return -ENOMEM;
|
||||
|
||||
error = gfs2_quota_lock(dip, NO_QUOTA_CHANGE, NO_QUOTA_CHANGE);
|
||||
if (error)
|
||||
|
|
|
@ -649,6 +649,10 @@ static int gfs2_write_begin(struct file *file, struct address_space *mapping,
|
|||
|
||||
if (alloc_required) {
|
||||
al = gfs2_alloc_get(ip);
|
||||
if (!al) {
|
||||
error = -ENOMEM;
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
error = gfs2_quota_lock(ip, NO_QUOTA_CHANGE, NO_QUOTA_CHANGE);
|
||||
if (error)
|
||||
|
|
|
@ -200,6 +200,10 @@ static int gfs2_link(struct dentry *old_dentry, struct inode *dir,
|
|||
|
||||
if (alloc_required) {
|
||||
struct gfs2_alloc *al = gfs2_alloc_get(dip);
|
||||
if (!al) {
|
||||
error = -ENOMEM;
|
||||
goto out_gunlock;
|
||||
}
|
||||
|
||||
error = gfs2_quota_lock(dip, NO_QUOTA_CHANGE, NO_QUOTA_CHANGE);
|
||||
if (error)
|
||||
|
@ -716,6 +720,10 @@ static int gfs2_rename(struct inode *odir, struct dentry *odentry,
|
|||
|
||||
if (alloc_required) {
|
||||
struct gfs2_alloc *al = gfs2_alloc_get(ndip);
|
||||
if (!al) {
|
||||
error = -ENOMEM;
|
||||
goto out_gunlock;
|
||||
}
|
||||
|
||||
error = gfs2_quota_lock(ndip, NO_QUOTA_CHANGE, NO_QUOTA_CHANGE);
|
||||
if (error)
|
||||
|
@ -953,7 +961,8 @@ static int setattr_chown(struct inode *inode, struct iattr *attr)
|
|||
if (!(attr->ia_valid & ATTR_GID) || ogid == ngid)
|
||||
ogid = ngid = NO_QUOTA_CHANGE;
|
||||
|
||||
gfs2_alloc_get(ip);
|
||||
if (!gfs2_alloc_get(ip))
|
||||
return -ENOMEM;
|
||||
|
||||
error = gfs2_quota_lock(ip, nuid, ngid);
|
||||
if (error)
|
||||
|
|
|
@ -617,8 +617,9 @@ static int gfs2_adjust_quota(struct gfs2_inode *ip, loff_t loc,
|
|||
int err = -EIO;
|
||||
|
||||
if (gfs2_is_stuffed(ip)) {
|
||||
struct gfs2_alloc *al = NULL;
|
||||
al = gfs2_alloc_get(ip);
|
||||
struct gfs2_alloc *al = gfs2_alloc_get(ip);
|
||||
if (!al)
|
||||
return -ENOMEM;
|
||||
/* just request 1 blk */
|
||||
al->al_requested = 1;
|
||||
gfs2_inplace_reserve(ip);
|
||||
|
@ -729,6 +730,10 @@ static int do_sync(unsigned int num_qd, struct gfs2_quota_data **qda)
|
|||
|
||||
if (nalloc) {
|
||||
al = gfs2_alloc_get(ip);
|
||||
if (!al) {
|
||||
error = -ENOMEM;
|
||||
goto out_gunlock;
|
||||
}
|
||||
|
||||
al->al_requested = nalloc * (data_blocks + ind_blocks);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче