Commit 1c85a8c0 authored by Pavel Shilovsky's avatar Pavel Shilovsky

Update 3.4 sources from stable (v3.4.68)

parent 67cb4618
...@@ -323,14 +323,14 @@ UniToupper(register wchar_t uc) ...@@ -323,14 +323,14 @@ UniToupper(register wchar_t uc)
/* /*
* UniStrupr: Upper case a unicode string * UniStrupr: Upper case a unicode string
*/ */
static inline wchar_t * static inline __le16 *
UniStrupr(register wchar_t *upin) UniStrupr(register __le16 *upin)
{ {
register wchar_t *up; register __le16 *up;
up = upin; up = upin;
while (*up) { /* For all characters */ while (*up) { /* For all characters */
*up = UniToupper(*up); *up = cpu_to_le16(UniToupper(le16_to_cpu(*up)));
up++; up++;
} }
return upin; /* Return input pointer */ return upin; /* Return input pointer */
......
...@@ -369,7 +369,7 @@ find_domain_name(struct cifs_ses *ses, const struct nls_table *nls_cp) ...@@ -369,7 +369,7 @@ find_domain_name(struct cifs_ses *ses, const struct nls_table *nls_cp)
if (blobptr + attrsize > blobend) if (blobptr + attrsize > blobend)
break; break;
if (type == NTLMSSP_AV_NB_DOMAIN_NAME) { if (type == NTLMSSP_AV_NB_DOMAIN_NAME) {
if (!attrsize) if (!attrsize || attrsize >= CIFS_MAX_DOMAINNAME_LEN)
break; break;
if (!ses->domainName) { if (!ses->domainName) {
ses->domainName = ses->domainName =
...@@ -394,7 +394,7 @@ static int calc_ntlmv2_hash(struct cifs_ses *ses, char *ntlmv2_hash, ...@@ -394,7 +394,7 @@ static int calc_ntlmv2_hash(struct cifs_ses *ses, char *ntlmv2_hash,
int rc = 0; int rc = 0;
int len; int len;
char nt_hash[CIFS_NTHASH_SIZE]; char nt_hash[CIFS_NTHASH_SIZE];
wchar_t *user; __le16 *user;
wchar_t *domain; wchar_t *domain;
wchar_t *server; wchar_t *server;
...@@ -419,7 +419,7 @@ static int calc_ntlmv2_hash(struct cifs_ses *ses, char *ntlmv2_hash, ...@@ -419,7 +419,7 @@ static int calc_ntlmv2_hash(struct cifs_ses *ses, char *ntlmv2_hash,
return rc; return rc;
} }
/* convert ses->user_name to unicode and uppercase */ /* convert ses->user_name to unicode */
len = ses->user_name ? strlen(ses->user_name) : 0; len = ses->user_name ? strlen(ses->user_name) : 0;
user = kmalloc(2 + (len * 2), GFP_KERNEL); user = kmalloc(2 + (len * 2), GFP_KERNEL);
if (user == NULL) { if (user == NULL) {
...@@ -429,7 +429,7 @@ static int calc_ntlmv2_hash(struct cifs_ses *ses, char *ntlmv2_hash, ...@@ -429,7 +429,7 @@ static int calc_ntlmv2_hash(struct cifs_ses *ses, char *ntlmv2_hash,
} }
if (len) { if (len) {
len = cifs_strtoUTF16((__le16 *)user, ses->user_name, len, nls_cp); len = cifs_strtoUTF16(user, ses->user_name, len, nls_cp);
UniStrupr(user); UniStrupr(user);
} else { } else {
memset(user, '\0', 2); memset(user, '\0', 2);
......
...@@ -38,6 +38,7 @@ ...@@ -38,6 +38,7 @@
#define MAX_TREE_SIZE (2 + MAX_SERVER_SIZE + 1 + MAX_SHARE_SIZE + 1) #define MAX_TREE_SIZE (2 + MAX_SERVER_SIZE + 1 + MAX_SHARE_SIZE + 1)
#define MAX_SERVER_SIZE 15 #define MAX_SERVER_SIZE 15
#define MAX_SHARE_SIZE 80 #define MAX_SHARE_SIZE 80
#define CIFS_MAX_DOMAINNAME_LEN 256 /* max domain name length */
#define MAX_USERNAME_SIZE 256 /* reasonable maximum for current servers */ #define MAX_USERNAME_SIZE 256 /* reasonable maximum for current servers */
#define MAX_PASSWORD_SIZE 512 /* max for windows seems to be 256 wide chars */ #define MAX_PASSWORD_SIZE 512 /* max for windows seems to be 256 wide chars */
......
...@@ -363,6 +363,7 @@ cifs_reconnect(struct TCP_Server_Info *server) ...@@ -363,6 +363,7 @@ cifs_reconnect(struct TCP_Server_Info *server)
try_to_freeze(); try_to_freeze();
/* we should try only the port we connected to before */ /* we should try only the port we connected to before */
mutex_lock(&server->srv_mutex);
rc = generic_ip_connect(server); rc = generic_ip_connect(server);
if (rc) { if (rc) {
cFYI(1, "reconnect error %d", rc); cFYI(1, "reconnect error %d", rc);
...@@ -374,6 +375,7 @@ cifs_reconnect(struct TCP_Server_Info *server) ...@@ -374,6 +375,7 @@ cifs_reconnect(struct TCP_Server_Info *server)
server->tcpStatus = CifsNeedNegotiate; server->tcpStatus = CifsNeedNegotiate;
spin_unlock(&GlobalMid_Lock); spin_unlock(&GlobalMid_Lock);
} }
mutex_unlock(&server->srv_mutex);
} while (server->tcpStatus == CifsNeedReconnect); } while (server->tcpStatus == CifsNeedReconnect);
return rc; return rc;
...@@ -1704,7 +1706,8 @@ cifs_parse_mount_options(const char *mountdata, const char *devname, ...@@ -1704,7 +1706,8 @@ cifs_parse_mount_options(const char *mountdata, const char *devname,
if (string == NULL) if (string == NULL)
goto out_nomem; goto out_nomem;
if (strnlen(string, 256) == 256) { if (strnlen(string, CIFS_MAX_DOMAINNAME_LEN)
== CIFS_MAX_DOMAINNAME_LEN) {
printk(KERN_WARNING "CIFS: domain name too" printk(KERN_WARNING "CIFS: domain name too"
" long\n"); " long\n");
goto cifs_parse_mount_err; goto cifs_parse_mount_err;
...@@ -2362,8 +2365,8 @@ cifs_put_smb_ses(struct cifs_ses *ses) ...@@ -2362,8 +2365,8 @@ cifs_put_smb_ses(struct cifs_ses *ses)
#ifdef CONFIG_KEYS #ifdef CONFIG_KEYS
/* strlen("cifs:a:") + INET6_ADDRSTRLEN + 1 */ /* strlen("cifs:a:") + CIFS_MAX_DOMAINNAME_LEN + 1 */
#define CIFSCREDS_DESC_SIZE (7 + INET6_ADDRSTRLEN + 1) #define CIFSCREDS_DESC_SIZE (7 + CIFS_MAX_DOMAINNAME_LEN + 1)
/* Populate username and pw fields from keyring if possible */ /* Populate username and pw fields from keyring if possible */
static int static int
......
...@@ -549,6 +549,11 @@ cifs_all_info_to_fattr(struct cifs_fattr *fattr, FILE_ALL_INFO *info, ...@@ -549,6 +549,11 @@ cifs_all_info_to_fattr(struct cifs_fattr *fattr, FILE_ALL_INFO *info,
fattr->cf_mode &= ~(S_IWUGO); fattr->cf_mode &= ~(S_IWUGO);
fattr->cf_nlink = le32_to_cpu(info->NumberOfLinks); fattr->cf_nlink = le32_to_cpu(info->NumberOfLinks);
if (fattr->cf_nlink < 1) {
cFYI(1, "replacing bogus file nlink value %u\n",
fattr->cf_nlink);
fattr->cf_nlink = 1;
}
} }
fattr->cf_uid = cifs_sb->mnt_uid; fattr->cf_uid = cifs_sb->mnt_uid;
......
...@@ -198,7 +198,7 @@ static void unicode_domain_string(char **pbcc_area, struct cifs_ses *ses, ...@@ -198,7 +198,7 @@ static void unicode_domain_string(char **pbcc_area, struct cifs_ses *ses,
bytes_ret = 0; bytes_ret = 0;
} else } else
bytes_ret = cifs_strtoUTF16((__le16 *) bcc_ptr, ses->domainName, bytes_ret = cifs_strtoUTF16((__le16 *) bcc_ptr, ses->domainName,
256, nls_cp); CIFS_MAX_DOMAINNAME_LEN, nls_cp);
bcc_ptr += 2 * bytes_ret; bcc_ptr += 2 * bytes_ret;
bcc_ptr += 2; /* account for null terminator */ bcc_ptr += 2; /* account for null terminator */
...@@ -256,8 +256,8 @@ static void ascii_ssetup_strings(char **pbcc_area, struct cifs_ses *ses, ...@@ -256,8 +256,8 @@ static void ascii_ssetup_strings(char **pbcc_area, struct cifs_ses *ses,
/* copy domain */ /* copy domain */
if (ses->domainName != NULL) { if (ses->domainName != NULL) {
strncpy(bcc_ptr, ses->domainName, 256); strncpy(bcc_ptr, ses->domainName, CIFS_MAX_DOMAINNAME_LEN);
bcc_ptr += strnlen(ses->domainName, 256); bcc_ptr += strnlen(ses->domainName, CIFS_MAX_DOMAINNAME_LEN);
} /* else we will send a null domain name } /* else we will send a null domain name
so the server will default to its own domain */ so the server will default to its own domain */
*bcc_ptr = 0; *bcc_ptr = 0;
......
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