All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.