NFSv4.2: Fix initialisation of struct nfs4_label
[ Upstream commit c528f70f504434eaff993a5ddd52203a2010d51f ]
The call to nfs4_label_init_security() should return a fully initialised
label.
Fixes: aa9c266962
("NFS: Client implementation of Labeled-NFS")
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
15feece7af
commit
d16d7870fd
@@ -130,6 +130,11 @@ nfs4_label_init_security(struct inode *dir, struct dentry *dentry,
|
|||||||
if (nfs_server_capable(dir, NFS_CAP_SECURITY_LABEL) == 0)
|
if (nfs_server_capable(dir, NFS_CAP_SECURITY_LABEL) == 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
label->lfs = 0;
|
||||||
|
label->pi = 0;
|
||||||
|
label->len = 0;
|
||||||
|
label->label = NULL;
|
||||||
|
|
||||||
err = security_dentry_init_security(dentry, sattr->ia_mode,
|
err = security_dentry_init_security(dentry, sattr->ia_mode,
|
||||||
&dentry->d_name, (void **)&label->label, &label->len);
|
&dentry->d_name, (void **)&label->label, &label->len);
|
||||||
if (err == 0)
|
if (err == 0)
|
||||||
@@ -3793,7 +3798,7 @@ nfs4_atomic_open(struct inode *dir, struct nfs_open_context *ctx,
|
|||||||
int open_flags, struct iattr *attr, int *opened)
|
int open_flags, struct iattr *attr, int *opened)
|
||||||
{
|
{
|
||||||
struct nfs4_state *state;
|
struct nfs4_state *state;
|
||||||
struct nfs4_label l = {0, 0, 0, NULL}, *label = NULL;
|
struct nfs4_label l, *label;
|
||||||
|
|
||||||
label = nfs4_label_init_security(dir, ctx->dentry, attr, &l);
|
label = nfs4_label_init_security(dir, ctx->dentry, attr, &l);
|
||||||
|
|
||||||
@@ -4557,7 +4562,7 @@ nfs4_proc_create(struct inode *dir, struct dentry *dentry, struct iattr *sattr,
|
|||||||
int flags)
|
int flags)
|
||||||
{
|
{
|
||||||
struct nfs_server *server = NFS_SERVER(dir);
|
struct nfs_server *server = NFS_SERVER(dir);
|
||||||
struct nfs4_label l, *ilabel = NULL;
|
struct nfs4_label l, *ilabel;
|
||||||
struct nfs_open_context *ctx;
|
struct nfs_open_context *ctx;
|
||||||
struct nfs4_state *state;
|
struct nfs4_state *state;
|
||||||
int status = 0;
|
int status = 0;
|
||||||
@@ -4916,7 +4921,7 @@ static int nfs4_proc_symlink(struct inode *dir, struct dentry *dentry,
|
|||||||
struct nfs4_exception exception = {
|
struct nfs4_exception exception = {
|
||||||
.interruptible = true,
|
.interruptible = true,
|
||||||
};
|
};
|
||||||
struct nfs4_label l, *label = NULL;
|
struct nfs4_label l, *label;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
label = nfs4_label_init_security(dir, dentry, sattr, &l);
|
label = nfs4_label_init_security(dir, dentry, sattr, &l);
|
||||||
@@ -4957,7 +4962,7 @@ static int nfs4_proc_mkdir(struct inode *dir, struct dentry *dentry,
|
|||||||
struct nfs4_exception exception = {
|
struct nfs4_exception exception = {
|
||||||
.interruptible = true,
|
.interruptible = true,
|
||||||
};
|
};
|
||||||
struct nfs4_label l, *label = NULL;
|
struct nfs4_label l, *label;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
label = nfs4_label_init_security(dir, dentry, sattr, &l);
|
label = nfs4_label_init_security(dir, dentry, sattr, &l);
|
||||||
@@ -5078,7 +5083,7 @@ static int nfs4_proc_mknod(struct inode *dir, struct dentry *dentry,
|
|||||||
struct nfs4_exception exception = {
|
struct nfs4_exception exception = {
|
||||||
.interruptible = true,
|
.interruptible = true,
|
||||||
};
|
};
|
||||||
struct nfs4_label l, *label = NULL;
|
struct nfs4_label l, *label;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
label = nfs4_label_init_security(dir, dentry, sattr, &l);
|
label = nfs4_label_init_security(dir, dentry, sattr, &l);
|
||||||
|
Reference in New Issue
Block a user