From: Paulo Alcantara <pc@manguebit.org>
To: Ralph Boehme <slow@samba.org>, smfrench@gmail.com
Cc: Jean-Baptiste Denis <jbdenis@pasteur.fr>,
Frank Sorenson <sorenson@redhat.com>,
Olga Kornievskaia <okorniev@redhat.com>,
Benjamin Coddington <bcodding@redhat.com>,
Scott Mayhew <smayhew@redhat.com>,
linux-cifs@vger.kernel.org
Subject: Re: [PATCH v2] smb: client: fix data loss due to broken rename(2)
Date: Wed, 03 Sep 2025 15:45:37 -0300 [thread overview]
Message-ID: <faf6c4eaa69a36617d65327b98ed105d@manguebit.org> (raw)
In-Reply-To: <d3702a1b-0dfc-4d56-8f0c-0cd588f151b2@samba.org>
Ralph Boehme <slow@samba.org> writes:
> Hi Paulo,
>
> On 9/2/25 9:09 PM, Paulo Alcantara wrote:
>> Ralph Boehme <slow@samba.org> writes:
>>
>>> Why not simply fail the rename instead of trying to implement some
>>> clever but complex and error prone fallback?
>>
>> We're doing this for SMB1 for a very long time and haven't heard of any
>> issues so far. I've got a "safer" version [1] that does everything a
>> single compound request but then implemented this non-compound version
>> due to an existing Azure bug that seems to limit the compound in 4
>> commands, AFAICT. Most applications depend on such behavior working,
>> which is renaming open files.
>
> maybe I'm barking of the wrong tree, but you *can* rename open files:
>
> $ bin/smbclient -U 'USER%PASS' //IP/C\$
> smb: \> cd Users\administrator.WINCLUSTER\Desktop\
> smb: \Users\administrator.WINCLUSTER\Desktop\> open
> t-ph-oplock-b-downgraded-s.cab
> open file
> \Users\administrator.WINCLUSTER\Desktop\t-ph-oplock-b-downgraded-s.cab:
> for read/write fnum 1
> smb: \Users\administrator.WINCLUSTER\Desktop\> rename
> t-ph-oplock-b-downgraded-s.cab renamed
> smb: \Users\administrator.WINCLUSTER\Desktop\>
>
> ...given the open is with SHARE_DELETE (had to tweak smbclient to
> actually allow that).
Interesting.
cifs.ko will get STATUS_ACCESS_DENIED when attempting to rename the open
file. The file was open with SHARE_READ|SHARE_WRITE|SHARE_DELETE, BTW.
Also, note that cifs.ko will not reuse the open handle, rather it will
send a compound request of create+set_info(rename)+close to the file
which will fail with STATUS_ACCESS_DENIED.
What am I missing?
> If the rename destination is open and the server rightly fails the
> rename for that reason, then masking that error is a mistake imho.
>
> When doing
>
> $ mv a b
>
> the user asked to rename a, he did NOT ask to rename b which becomes
> important, because if you do
>
> rename("b", ".renamehackXXXX")
>
> under the hood and then reattempt the rename
>
> rename("a", "b")
>
> and then the user subsequently does
>
> $ mv b ..
> $ cd ..
> $ rmdir DIR
>
> where DIR is the directory all of the above was performed inside, the
> rmdir will fail with ENOTEMPTY and *now* the user is confused.
Yes, I understand your point. That's really confusing.
How can we resolve above cases without performing the silly renames
then?
next prev parent reply other threads:[~2025-09-03 18:45 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-02 16:54 [PATCH v2] smb: client: fix data loss due to broken rename(2) Paulo Alcantara
2025-09-02 18:57 ` Ralph Boehme
[not found] ` <CAH2r5mvqJXfgQwKLSWrfBDw8Rc88ys8a_cWB5DtD19HSDmFn5w@mail.gmail.com>
2025-09-02 19:05 ` Ralph Boehme
2025-09-02 19:39 ` Paulo Alcantara
2025-09-03 15:48 ` Ralph Boehme
2025-09-03 16:19 ` Paulo Alcantara
2025-09-04 6:04 ` Ralph Boehme
2025-09-02 19:09 ` Paulo Alcantara
2025-09-03 16:10 ` Ralph Boehme
2025-09-03 18:45 ` Paulo Alcantara [this message]
2025-09-03 19:55 ` ronnie sahlberg
2025-09-03 20:10 ` ronnie sahlberg
2025-09-03 20:28 ` Paulo Alcantara
2025-09-03 20:44 ` ronnie sahlberg
2025-09-03 20:55 ` Paulo Alcantara
2025-09-03 20:18 ` Paulo Alcantara
2025-09-03 19:13 ` Paulo Alcantara
[not found] ` <notmuch-sha1-4fd369d43684b0739d61e9e931e63ca8c7e2a82c>
2025-09-02 19:10 ` Paulo Alcantara
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=faf6c4eaa69a36617d65327b98ed105d@manguebit.org \
--to=pc@manguebit.org \
--cc=bcodding@redhat.com \
--cc=jbdenis@pasteur.fr \
--cc=linux-cifs@vger.kernel.org \
--cc=okorniev@redhat.com \
--cc=slow@samba.org \
--cc=smayhew@redhat.com \
--cc=smfrench@gmail.com \
--cc=sorenson@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox