Commit 8395ebd9 authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://cifs.bkbits.net/linux-2.5cifs

into penguin.transmeta.com:/home/torvalds/v2.5/linux
parents ce4a4076 7d220c8f
......@@ -94,13 +94,17 @@ cifs_read_super(struct super_block *sb, void *data,
sb->s_blocksize_bits = 14; /* default 2**14 = CIFS_MAX_MSGSIZE */
inode = iget(sb, ROOT_I);
if (!inode)
if (!inode) {
rc = -ENOMEM;
goto out_no_root;
}
sb->s_root = d_alloc_root(inode);
if (!sb->s_root)
if (!sb->s_root) {
rc = -ENOMEM;
goto out_no_root;
}
return 0;
......@@ -114,7 +118,7 @@ cifs_read_super(struct super_block *sb, void *data,
unload_nls(cifs_sb->local_nls);
if(cifs_sb)
kfree(cifs_sb);
return -EINVAL;
return rc;
}
void
......
......@@ -346,6 +346,7 @@ parse_mount_options(char *options, const char *devname, struct smb_vol *vol)
{
char *value;
char *data;
int temp_len;
memset(vol,0,sizeof(struct smb_vol));
vol->linux_uid = current->uid; /* current->euid instead? */
......@@ -398,8 +399,9 @@ parse_mount_options(char *options, const char *devname, struct smb_vol *vol)
"CIFS: invalid path to network resource\n");
return 1; /* needs_arg; */
}
if (strnlen(value, 300) < 300) {
vol->UNC = value;
if ((temp_len = strnlen(value, 300)) < 300) {
vol->UNC = kmalloc(GFP_KERNEL, temp_len);
strcpy(vol->UNC,value);
if (strncmp(vol->UNC, "//", 2) == 0) {
vol->UNC[0] = '\\';
vol->UNC[1] = '\\';
......@@ -472,8 +474,9 @@ parse_mount_options(char *options, const char *devname, struct smb_vol *vol)
printk(KERN_WARNING "CIFS: Missing UNC name for mount target\n");
return 1;
}
if (strnlen(devname, 300) < 300) {
vol->UNC = devname;
if ((temp_len = strnlen(devname, 300)) < 300) {
vol->UNC = kmalloc(GFP_KERNEL, temp_len);
strcpy(vol->UNC,devname);
if (strncmp(vol->UNC, "//", 2) == 0) {
vol->UNC[0] = '\\';
vol->UNC[1] = '\\';
......@@ -812,6 +815,8 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
cFYI(1, ("Entering cifs_mount. Xid: %d with: %s", xid, mount_data));
if (parse_mount_options(mount_data, devname, &volume_info)) {
if(volume_info.UNC)
kfree(volume_info.UNC);
FreeXid(xid);
return -EINVAL;
}
......@@ -852,6 +857,8 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
("Error connecting to IPv4 socket. Aborting operation"));
if(csocket != NULL)
sock_release(csocket);
if(volume_info.UNC)
kfree(volume_info.UNC);
FreeXid(xid);
return rc;
}
......@@ -860,6 +867,8 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
if (srvTcp == NULL) {
rc = -ENOMEM;
sock_release(csocket);
if(volume_info.UNC)
kfree(volume_info.UNC);
FreeXid(xid);
return rc;
} else {
......@@ -943,6 +952,8 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
"",
cifs_sb->
local_nls);
if(volume_info.UNC)
kfree(volume_info.UNC);
FreeXid(xid);
return -ENODEV;
} else {
......@@ -995,7 +1006,8 @@ cifs_mount(struct super_block *sb, struct cifs_sb_info *cifs_sb,
if (tcon->ses->capabilities & CAP_UNIX)
CIFSSMBQFSUnixInfo(xid, tcon, cifs_sb->local_nls);
}
if(volume_info.UNC)
kfree(volume_info.UNC);
FreeXid(xid);
return rc;
}
......
......@@ -46,7 +46,7 @@ struct smb_to_posix_error {
const struct smb_to_posix_error mapping_table_ERRDOS[] = {
{ERRbadfunc, -EINVAL},
{ERRbadfile, -ENOENT},
{ERRbadpath, -ENOENT},
{ERRbadpath, -ENOTDIR},
{ERRnofids, -EMFILE},
{ERRnoaccess, -EACCES},
{ERRbadfid, -EBADF},
......@@ -63,26 +63,29 @@ const struct smb_to_posix_error mapping_table_ERRDOS[] = {
{ERRnofiles, -ENOENT},
{ERRbadshare, -ETXTBSY},
{ERRlock, -EACCES},
{ERRfilexists, -EINVAL},
{ERRunsup, -EINVAL},
{ERRnosuchshare,-ENXIO},
{ERRfilexists, -EEXIST},
{ERRinvparm, -EINVAL},
{ERRdiskfull, -ENOSPC},
{ERRinvnum, -EINVAL},
{ERRinvname, -ENOENT},
{ERRdirnotempty, -ENOTEMPTY},
{ERRnotlocked, -ENOLCK},
{ERRalreadyexists, -EEXIST},
{ERRmoredata, -EOVERFLOW},
{ErrQuota, -EDQUOT},
{ErrNotALink, -ENOLINK},
{ERRnetlogonNotStarted,-ENOPROTOOPT},
{0, 0}
};
const struct smb_to_posix_error mapping_table_ERRSRV[] = {
{ERRerror, -EIO},
{ERRbadpw, -EACCES},
{ERRbadpw, -EPERM},
{ERRbadtype, -EREMOTE},
{ERRaccess, -EACCES},
{ERRinvtid, -ENXIO},
{ERRinvnetname, -ENOENT},
{ERRinvnetname, -ENODEV},
{ERRinvdevice, -ENXIO},
{ERRqfull, -ENOSPC},
{ERRqtoobig, -ENOSPC},
......@@ -617,7 +620,7 @@ static const struct {
ERRHRD, ERRgeneral, NT_STATUS_EVENTLOG_CANT_START}, {
ERRDOS, ERRnoaccess, NT_STATUS_TRUST_FAILURE}, {
ERRHRD, ERRgeneral, NT_STATUS_MUTANT_LIMIT_EXCEEDED}, {
ERRDOS, 2455, NT_STATUS_NETLOGON_NOT_STARTED}, {
ERRDOS, ERRnetlogonNotStarted, NT_STATUS_NETLOGON_NOT_STARTED}, {
ERRSRV, 2239, NT_STATUS_ACCOUNT_EXPIRED}, {
ERRHRD, ERRgeneral, NT_STATUS_POSSIBLE_DEADLOCK}, {
ERRHRD, ERRgeneral, NT_STATUS_NETWORK_CREDENTIAL_CONFLICT}, {
......
......@@ -59,7 +59,7 @@
#define ERRfilexists 80 /* The file named in the request already exists. */
#define ERRinvparm 87
#define ERRdiskfull 112
#define ERRinvnum 123
#define ERRinvname 123
#define ERRdirnotempty 145
#define ERRnotlocked 158
#define ERRalreadyexists 183
......@@ -109,4 +109,5 @@ class.*/
#define ERRbadclient 2240
#define ERRbadLogonTime 2241
#define ERRpasswordExpired 2242
#define ERRnetlogonNotStarted 2455
#define ERRnosupport 0xFFFF
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment