diff options
Diffstat (limited to 'fs')
| -rw-r--r-- | fs/cifs/readdir.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c index 5de03ec20144..a090bbe6ee29 100644 --- a/fs/cifs/readdir.c +++ b/fs/cifs/readdir.c | |||
| @@ -554,7 +554,10 @@ static int find_cifs_entry(const int xid, struct cifs_tcon *pTcon, | |||
| 554 | rc); | 554 | rc); |
| 555 | return rc; | 555 | return rc; |
| 556 | } | 556 | } |
| 557 | cifs_save_resume_key(cifsFile->srch_inf.last_entry, cifsFile); | 557 | /* FindFirst/Next set last_entry to NULL on malformed reply */ |
| 558 | if (cifsFile->srch_inf.last_entry) | ||
| 559 | cifs_save_resume_key(cifsFile->srch_inf.last_entry, | ||
| 560 | cifsFile); | ||
| 558 | } | 561 | } |
| 559 | 562 | ||
| 560 | while ((index_to_find >= cifsFile->srch_inf.index_of_last_entry) && | 563 | while ((index_to_find >= cifsFile->srch_inf.index_of_last_entry) && |
| @@ -562,7 +565,10 @@ static int find_cifs_entry(const int xid, struct cifs_tcon *pTcon, | |||
| 562 | cFYI(1, "calling findnext2"); | 565 | cFYI(1, "calling findnext2"); |
| 563 | rc = CIFSFindNext(xid, pTcon, cifsFile->netfid, | 566 | rc = CIFSFindNext(xid, pTcon, cifsFile->netfid, |
| 564 | &cifsFile->srch_inf); | 567 | &cifsFile->srch_inf); |
| 565 | cifs_save_resume_key(cifsFile->srch_inf.last_entry, cifsFile); | 568 | /* FindFirst/Next set last_entry to NULL on malformed reply */ |
| 569 | if (cifsFile->srch_inf.last_entry) | ||
| 570 | cifs_save_resume_key(cifsFile->srch_inf.last_entry, | ||
| 571 | cifsFile); | ||
| 566 | if (rc) | 572 | if (rc) |
| 567 | return -ENOENT; | 573 | return -ENOENT; |
| 568 | } | 574 | } |
