Linux CIFS filesystem development
 help / color / mirror / Atom feed
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?

  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