diff options
| author | Al Viro <viro@ftp.linux.org.uk> | 2006-10-14 11:48:26 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-15 14:00:58 -0400 |
| commit | 733f99acc82543030ce0417e2f2201ddc63097af (patch) | |
| tree | ea056804fb4883b407422ac563373c1092fe389c /fs/cifs | |
| parent | 645408d1ffe9f27b176a88302c22420f301607db (diff) | |
[PATCH] new cifs endianness bugs
* missing cpu_to_le64() for ChangeTime (introduced by
[CIFS] Legacy time handling for Win9x and OS/2 part 1)
* missing le16_to_cpu() for DialectIndex (introduced by
[CIFS] Do not send newer QFSInfo to legacy servers which can not support it)
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs/cifs')
| -rw-r--r-- | fs/cifs/cifssmb.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c index 5dc5a966bd5f..098790eb2aa1 100644 --- a/fs/cifs/cifssmb.c +++ b/fs/cifs/cifssmb.c | |||
| @@ -399,6 +399,7 @@ CIFSSMBNegotiate(unsigned int xid, struct cifsSesInfo *ses) | |||
| 399 | struct TCP_Server_Info * server; | 399 | struct TCP_Server_Info * server; |
| 400 | u16 count; | 400 | u16 count; |
| 401 | unsigned int secFlags; | 401 | unsigned int secFlags; |
| 402 | u16 dialect; | ||
| 402 | 403 | ||
| 403 | if(ses->server) | 404 | if(ses->server) |
| 404 | server = ses->server; | 405 | server = ses->server; |
| @@ -438,9 +439,10 @@ CIFSSMBNegotiate(unsigned int xid, struct cifsSesInfo *ses) | |||
| 438 | if (rc != 0) | 439 | if (rc != 0) |
| 439 | goto neg_err_exit; | 440 | goto neg_err_exit; |
| 440 | 441 | ||
| 441 | cFYI(1,("Dialect: %d", pSMBr->DialectIndex)); | 442 | dialect = le16_to_cpu(pSMBr->DialectIndex); |
| 443 | cFYI(1,("Dialect: %d", dialect)); | ||
| 442 | /* Check wct = 1 error case */ | 444 | /* Check wct = 1 error case */ |
| 443 | if((pSMBr->hdr.WordCount < 13) || (pSMBr->DialectIndex == BAD_PROT)) { | 445 | if((pSMBr->hdr.WordCount < 13) || (dialect == BAD_PROT)) { |
| 444 | /* core returns wct = 1, but we do not ask for core - otherwise | 446 | /* core returns wct = 1, but we do not ask for core - otherwise |
| 445 | small wct just comes when dialect index is -1 indicating we | 447 | small wct just comes when dialect index is -1 indicating we |
| 446 | could not negotiate a common dialect */ | 448 | could not negotiate a common dialect */ |
| @@ -448,8 +450,8 @@ CIFSSMBNegotiate(unsigned int xid, struct cifsSesInfo *ses) | |||
| 448 | goto neg_err_exit; | 450 | goto neg_err_exit; |
| 449 | #ifdef CONFIG_CIFS_WEAK_PW_HASH | 451 | #ifdef CONFIG_CIFS_WEAK_PW_HASH |
| 450 | } else if((pSMBr->hdr.WordCount == 13) | 452 | } else if((pSMBr->hdr.WordCount == 13) |
| 451 | && ((pSMBr->DialectIndex == LANMAN_PROT) | 453 | && ((dialect == LANMAN_PROT) |
| 452 | || (pSMBr->DialectIndex == LANMAN2_PROT))) { | 454 | || (dialect == LANMAN2_PROT))) { |
| 453 | __s16 tmp; | 455 | __s16 tmp; |
| 454 | struct lanman_neg_rsp * rsp = (struct lanman_neg_rsp *)pSMBr; | 456 | struct lanman_neg_rsp * rsp = (struct lanman_neg_rsp *)pSMBr; |
| 455 | 457 | ||
| @@ -2943,7 +2945,7 @@ QInfRetry: | |||
| 2943 | ts.tv_nsec = 0; | 2945 | ts.tv_nsec = 0; |
| 2944 | ts.tv_sec = time; | 2946 | ts.tv_sec = time; |
| 2945 | /* decode time fields */ | 2947 | /* decode time fields */ |
| 2946 | pFinfo->ChangeTime = cifs_UnixTimeToNT(ts); | 2948 | pFinfo->ChangeTime = cpu_to_le64(cifs_UnixTimeToNT(ts)); |
| 2947 | pFinfo->LastWriteTime = pFinfo->ChangeTime; | 2949 | pFinfo->LastWriteTime = pFinfo->ChangeTime; |
| 2948 | pFinfo->LastAccessTime = 0; | 2950 | pFinfo->LastAccessTime = 0; |
| 2949 | pFinfo->AllocationSize = | 2951 | pFinfo->AllocationSize = |
