Hi R. Diez,

Steve posted a new patch [1] that also rounds the wsize down when specified on
the mount command line, just as we wanted:

[1] https://lore.kernel.org/linux-
cifs/CAH2r5mvPz2CUyKDZv_9fYGu=9L=3uime7xajgbbu+if8ch8...@mail.gmail.com/

I tested it, and it works great.

$ sudo mount -t cifs -o username=ubuntu,vers=1.0,wsize=16850 
//192.168.122.172/sambashare ~/share
$ mount -l
//192.168.122.172/sambashare on /home/ubuntu/share type cifs 
(rw,relatime,vers=1.0,cache=strict,username=ubuntu,uid=0,noforceuid,gid=0,noforcegid,
addr=192.168.122.172,soft,unix,posixpaths,serverino,mapposix,acl,rsize=1048576,wsize=16384,bsize=1048576,retrans=1,echo_interval=60,actimeo=1,closetimeo=1)
$ sudo dmesg | tail
[   48.767560] Use of the less secure dialect vers=1.0 is not recommended 
unless required for access to very old servers
[   48.768399] CIFS: VFS: Use of the less secure dialect vers=1.0 is not 
recommended unless required for access to very old servers
[   48.769427] CIFS: VFS: wsize rounded down to 16384 to multiple of PAGE_SIZE 
4096
[   48.770069] CIFS: Attempting to mount //192.168.122.172/sambashare

I no longer get data corruption when specifying wsize on the mount
command line.

I built the new patch ontop of 6.5.0-15-generic again for you to try, if you
want.

Please note this package is NOT SUPPORTED by Canonical, and is for TESTING
PURPOSES ONLY. ONLY Install in a dedicated test environment.

You probably have my ppa already in place, you can just do a:
$ sudo apt update
$ sudo apt install linux-image-unsigned-6.5.0-15-generic 
linux-modules-6.5.0-15-generic linux-modules-extra-6.5.0-15-generic 
linux-headers-6.5.0-15-generic
$ sudo reboot
$ uname -rv
6.5.0-15-generic #15~22.04.1+TEST2049634v20240216b1-Ubuntu SMP PREEMPT_DYNAMIC 
Fr

Note the date change to 20240216. I kept using 6.5.0-15-generic over -17 due to
some other bugs I have been debugging on -17 that I am looking into.

Anyway, please test the new kernel, and try mount your smb1 share, and paste
back the last lines of dmesg with the CIFS: strings, so we can see the round
down take place.

Feel free to write back to Steve on linux-cifs too.

Hopefully we get this patch merged into upstream, and then I'll make sure we
get this into the next Ubuntu SRU cycle.

Thanks,
Matthew

-- 
You received this bug notification because you are a member of Kernel
Packages, which is subscribed to linux in Ubuntu.
https://bugs.launchpad.net/bugs/2049634

Title:
  smb: wsize blocks of bytes followed with binary zeros on copy,
  destroying data

Status in linux package in Ubuntu:
  In Progress
Status in linux source package in Mantic:
  In Progress
Status in linux source package in Noble:
  In Progress

Bug description:
  [Impact]

  Upon installing the 6.5 HWE kernel on Jammy, users with a custom wsize
  set will see data destruction when copying files from their systems
  onto a cifs smb 1.0 mount.

  wsize defaults to 65535 bytes, but when set to smaller values, like
  16850, users will see blocks of 16850 bytes copied over, followed by
  3900 binary zeros, followed by the next block of data followed by more
  binary zeros.

  A workaround is to increase wsize, but this only works for small
  files, as any files larger than wsize will see the bug.

  Most users will want to use the 6.2 HWE kernel until this is fixed.

  [Testcase]

  Start two VMs, one for the server, and the other, the client.

  Server
  ------

  $ sudo apt update
  $ sudo apt upgrade
  $ sudo apt install samba
  $ sudo vim /etc/samba/smb.conf 
  server min protocol = NT1
  [sambashare]
      comment = Samba on Ubuntu
      path = /home/ubuntu/sambashare
      read only = no
      browsable = yes
  $ mkdir ~/sambashare
  $ sudo smbpasswd -a ubuntu

  Client
  ------

  $ sudo apt update
  $ sudo apt install cifs-utils
  $ mkdir ~/share
  $ sudo mount -t cifs -o username=ubuntu,vers=1.0,wsize=16850 
//192.168.122.172/sambashare ~/share
  $ ( set -o pipefail && head --bytes=$(( 55 * 1000 )) /dev/zero | openssl enc 
-aes-128-ctr -nosalt -pass "pass:my-seed" -iter 1 | hexdump --no-squeezing 
--format '40/1 "%02x"' --format '"\n"' >"testdata.txt" )
  $ sha256sum testdata.txt 
  9ec09af020dce3270ea76531141940106f173c7243b7193a553480fb8500b3f2  testdata.txt

  Now copy the file to the share.

  Client
  ------
  $ cp testdata.txt share/

  Server
  ------
  $ sha256sum sambashare/testdata.txt 
  9e573a0aa795f9cd4de4ac684a1c056dbc7d2ba5494d02e71b6225ff5f0fd866  
sambashare/testdata.txt

  The SHA256 hash is different. If you view the file with less, you will
  find a block of wsize=16850 bytes, then 3900 bytes of binary zeros,
  followed by another wsize=16850 bytes, then 3900 bytes of binary
  zeros, etc.

  An example of a broken file is:
  https://launchpadlibrarian.net/712573213/testdata-back-from-server.txt

  [Where problems could occur]

  [Other info]

  Currently bisecting. Introduced in 6.3-rc1. Currently broken on
  mainline 6.8-rc3.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2049634/+subscriptions


-- 
Mailing list: https://launchpad.net/~kernel-packages
Post to     : kernel-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~kernel-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to