Eric Blake
1104d83c72
nbd-client: Refuse read-only client with BDRV_O_RDWR
...
The NBD spec says that clients should not try to write/trim to
an export advertised as read-only by the server. But we failed
to check that, and would allow the block layer to use NBD with
BDRV_O_RDWR even when the server is read-only, which meant we
were depending on the server sending a proper EPERM failure for
various commands, and also exposes a leaky abstraction: using
qemu-io in read-write mode would succeed on 'w -z 0 0' because
of local short-circuiting logic, but 'w 0 0' would send a
request over the wire (where it then depends on the server, and
fails at least for qemu-nbd but might pass for other NBD
implementations).
With this patch, a client MUST request read-only mode to access
a server that is doing a read-only export, or else it will get
a message like:
can't open device nbd://localhost:10809/foo: request for write access conflicts with read-only export
It is no longer possible to even attempt writes over the wire
(including the corner case of 0-length writes), because the block
layer enforces the explicit read-only request; this matches the
behavior of qcow2 when backed by a read-only POSIX file.
Fix several iotests to comply with the new behavior (since
qemu-nbd of an internal snapshot, as well as nbd-server-add over QMP,
default to a read-only export, we must tell blockdev-add/qemu-io to
set up a read-only client).
CC: qemu-stable@nongnu.org
Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <20171108215703.9295-3-eblake@redhat.com>
Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
2017-11-09 10:10:17 -06:00
..
2016-03-14 16:46:42 +01:00
2017-02-12 00:47:42 +01:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-05-12 15:33:24 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-05-12 15:33:24 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2017-04-24 15:09:33 -04:00
2015-09-11 10:21:38 +03:00
2016-04-15 17:56:56 +02:00
2016-01-07 21:30:17 +01:00
2016-04-15 17:56:56 +02:00
2017-05-11 14:28:05 +02:00
2017-04-24 15:09:33 -04:00
2016-01-07 21:30:17 +01:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2016-05-12 15:33:24 +02:00
2016-04-15 17:56:56 +02:00
2016-01-07 21:30:17 +01:00
2017-03-13 12:49:33 +01:00
2014-12-12 16:52:33 +00:00
2017-04-27 15:46:16 +02:00
2017-04-27 15:46:16 +02:00
2017-04-27 15:46:16 +02:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2017-04-24 15:09:33 -04:00
2017-04-27 15:39:49 +02:00
2017-04-24 15:09:33 -04:00
2014-12-12 16:52:33 +00:00
2017-10-06 16:28:58 +02:00
2017-05-26 16:48:21 +02:00
2016-04-15 17:56:56 +02:00
2016-01-20 13:36:23 +01:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2017-07-11 17:44:59 +02:00
2016-04-15 17:22:11 +02:00
2016-06-08 10:21:08 +02:00
2016-01-07 21:30:17 +01:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2016-03-17 15:47:56 +01:00
2016-04-15 17:56:56 +02:00
2016-01-07 21:30:17 +01:00
2016-04-15 17:56:56 +02:00
2016-01-07 21:30:17 +01:00
2016-04-15 17:56:56 +02:00
2017-10-06 16:28:58 +02:00
2017-09-26 14:46:23 +02:00
2017-07-24 15:06:04 +02:00
2017-08-01 18:09:33 +02:00
2017-07-24 15:06:04 +02:00
2017-07-11 17:44:55 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2015-12-18 14:36:17 +01:00
2012-11-14 18:19:21 +01:00
2017-07-11 17:45:02 +02:00
2013-09-12 10:12:47 +02:00
2013-09-12 10:12:47 +02:00
2017-05-11 11:08:40 +02:00
2015-09-11 10:21:38 +03:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2017-07-11 17:44:55 +02:00
2016-05-12 15:33:24 +02:00
2017-07-11 17:44:56 +02:00
2017-07-11 17:44:56 +02:00
2016-04-15 17:56:56 +02:00
2016-01-07 21:30:17 +01:00
2017-09-26 14:46:23 +02:00
2017-09-26 14:46:23 +02:00
2017-09-26 14:46:23 +02:00
2016-05-12 15:33:24 +02:00
2016-05-12 15:33:24 +02:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2017-07-24 15:06:04 +02:00
2016-09-05 19:06:48 +02:00
2015-12-03 11:08:07 +08:00
2015-12-03 11:08:07 +08:00
2016-09-05 19:06:47 +02:00
2013-09-12 10:12:47 +02:00
2017-11-09 10:10:17 -06:00
2013-12-04 15:19:00 +01:00
2017-08-01 18:09:33 +02:00
2017-08-01 18:09:33 +02:00
2016-04-15 17:56:56 +02:00
2017-07-10 13:18:05 +02:00
2016-04-15 17:56:56 +02:00
2017-10-06 16:28:58 +02:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2017-08-01 18:09:33 +02:00
2013-09-06 15:25:07 +02:00
2016-04-15 17:56:56 +02:00
2015-01-23 12:41:32 -05:00
2015-03-10 14:02:20 +01:00
2013-10-11 16:49:50 +02:00
2017-05-11 12:08:24 +02:00
2017-05-11 12:08:24 +02:00
2017-10-26 15:01:13 +02:00
2017-09-26 14:46:23 +02:00
2017-09-06 15:19:01 +01:00
2017-09-06 15:19:01 +01:00
2016-04-15 17:56:56 +02:00
2016-01-13 15:16:18 +01:00
2016-04-15 17:56:56 +02:00
2017-02-12 00:47:42 +01:00
2016-10-24 17:54:03 +02:00
2017-05-23 13:28:17 +02:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2017-04-24 15:09:33 -04:00
2015-09-11 10:21:38 +03:00
2017-08-01 18:09:33 +02:00
2017-10-26 14:45:57 +02:00
2016-04-15 17:56:56 +02:00
2017-02-12 00:47:42 +01:00
2016-04-15 17:56:56 +02:00
2017-02-12 00:47:42 +01:00
2016-06-07 14:40:51 +01:00
2016-06-07 14:40:51 +01:00
2016-04-15 17:56:56 +02:00
2017-02-12 00:47:42 +01:00
2016-04-15 17:56:56 +02:00
2015-09-11 10:21:38 +03:00
2016-04-15 17:56:56 +02:00
2017-02-12 00:47:42 +01:00
2016-10-24 17:54:03 +02:00
2017-05-23 13:28:17 +02:00
2017-07-18 15:27:37 +02:00
2017-07-18 15:27:37 +02:00
2017-08-30 13:00:38 -05:00
2017-10-30 21:48:41 +01:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2017-07-24 13:35:11 +02:00
2017-07-11 17:44:55 +02:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2017-10-26 15:01:13 +02:00
2017-07-11 17:44:56 +02:00
2016-04-15 17:56:56 +02:00
2017-02-12 00:47:42 +01:00
2016-04-15 17:56:56 +02:00
2016-07-18 18:19:01 -04:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2017-05-11 11:08:40 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2017-02-12 00:47:42 +01:00
2017-08-15 10:03:27 -05:00
2016-10-24 17:54:03 +02:00
2017-04-24 15:09:33 -04:00
2017-05-23 13:28:17 +02:00
2016-06-16 15:20:37 +02:00
2016-01-07 21:30:17 +01:00
2016-05-19 16:45:31 +02:00
2015-10-16 15:34:29 +02:00
2017-04-03 17:11:40 +02:00
2017-04-03 17:11:40 +02:00
2016-04-15 17:56:56 +02:00
2015-09-11 10:21:38 +03:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-08-22 11:01:12 +02:00
2017-09-26 15:00:32 +02:00
2017-05-11 14:28:06 +02:00
2016-04-15 17:56:56 +02:00
2016-01-13 15:16:18 +01:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-10-03 10:30:33 +01:00
2017-09-26 15:00:32 +02:00
2017-07-11 17:45:02 +02:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2016-04-15 17:56:56 +02:00
2014-12-12 16:52:33 +00:00
2017-08-08 14:36:59 +02:00
2017-08-08 14:36:59 +02:00
2016-04-15 17:56:56 +02:00
2015-12-18 14:36:17 +01:00
2016-04-15 17:56:56 +02:00
2017-07-18 15:27:37 +02:00
2016-04-15 17:56:56 +02:00
2015-12-18 14:34:43 +01:00
2016-04-15 17:56:56 +02:00
2014-12-10 10:31:20 +01:00
2017-04-24 15:09:33 -04:00
2017-07-10 13:18:05 +02:00
2016-04-15 17:56:56 +02:00
2015-09-11 10:21:38 +03:00
2016-04-15 17:56:56 +02:00
2017-02-12 00:47:42 +01:00
2017-04-24 15:09:33 -04:00
2017-05-23 13:28:17 +02:00
2016-10-24 17:54:03 +02:00
2015-11-11 16:25:47 +01:00
2016-04-15 17:56:56 +02:00
2017-05-23 13:28:17 +02:00
2017-07-11 17:44:59 +02:00
2017-05-23 13:28:17 +02:00
2016-04-15 17:56:56 +02:00
2015-09-11 10:21:38 +03:00
2016-04-15 17:56:56 +02:00
2017-05-11 14:28:07 +02:00
2016-04-15 17:56:56 +02:00
2015-02-16 15:07:18 +00:00
2017-08-01 18:09:33 +02:00
2016-11-14 22:47:34 -05:00
2017-10-26 15:01:14 +02:00
2017-10-26 15:01:14 +02:00
2017-07-11 17:45:00 +02:00
2017-07-11 17:45:00 +02:00
2017-10-26 15:01:13 +02:00
2017-10-26 15:01:13 +02:00
2016-04-15 17:56:56 +02:00
2015-03-10 14:02:24 +01:00
2015-04-28 15:36:09 +02:00
2015-04-28 15:36:09 +02:00
2017-04-24 15:09:33 -04:00
2017-04-27 15:39:49 +02:00
2016-04-15 17:56:56 +02:00
2017-02-12 00:47:42 +01:00
2015-07-02 10:06:23 +01:00
2015-07-02 10:06:23 +01:00
2016-04-15 17:56:56 +02:00
2015-12-18 14:34:43 +01:00
2017-07-11 17:44:56 +02:00
2017-07-11 17:44:56 +02:00
2016-04-15 17:56:56 +02:00
2015-07-27 17:19:07 +02:00
2017-08-08 15:19:16 +02:00
2016-05-19 16:45:31 +02:00
2017-02-24 16:09:22 +01:00
2017-10-06 16:28:58 +02:00
2016-04-15 17:56:56 +02:00
2015-09-14 16:51:37 +02:00
2017-09-26 14:46:23 +02:00
2016-09-23 13:45:36 +02:00
2017-11-09 10:10:17 -06:00
2017-07-17 13:57:42 -05:00
2017-08-01 18:09:33 +02:00
2017-02-28 20:47:46 +01:00
2017-07-11 17:45:00 +02:00
2017-04-27 15:39:49 +02:00
2017-04-24 15:09:33 -04:00
2017-07-17 13:57:42 -05:00
2016-02-02 18:07:27 +01:00
2017-07-11 17:44:55 +02:00
2017-07-11 17:44:59 +02:00
2017-04-27 15:39:49 +02:00
2016-03-14 16:46:42 +01:00
2017-05-11 14:28:06 +02:00
2017-11-09 10:10:17 -06:00
2016-10-27 19:05:23 +02:00
2016-04-12 18:07:39 +02:00
2016-03-17 16:43:30 +01:00
2017-07-11 17:45:00 +02:00
2017-07-11 17:45:00 +02:00
2016-04-15 17:56:56 +02:00
2016-04-12 18:06:51 +02:00
2016-04-20 16:52:55 +02:00
2016-04-20 16:52:55 +02:00
2017-08-01 18:09:33 +02:00
2017-07-10 13:18:05 +02:00
2017-06-30 21:48:06 +08:00
2017-06-30 21:48:06 +08:00
2016-10-24 17:54:03 +02:00
2016-06-16 15:20:37 +02:00
2017-08-01 18:09:33 +02:00
2017-05-23 13:28:17 +02:00
2017-07-11 17:44:59 +02:00
2017-07-11 17:44:59 +02:00
2017-07-18 15:27:37 +02:00
2017-07-11 17:44:56 +02:00
2017-07-11 17:44:59 +02:00
2016-09-20 22:10:57 +02:00
2016-09-20 22:10:57 +02:00
2016-09-20 22:10:57 +02:00
2017-08-01 18:09:33 +02:00
2016-10-24 17:54:03 +02:00
2017-09-26 15:00:32 +02:00
2017-09-26 15:00:32 +02:00
2017-10-06 16:28:58 +02:00
2017-07-11 17:44:59 +02:00
2017-07-11 17:44:59 +02:00
2016-09-20 22:10:57 +02:00
2017-07-11 17:45:00 +02:00
2016-10-31 16:52:39 +01:00
2017-09-26 14:46:23 +02:00
2017-09-18 19:43:38 -04:00
2017-02-12 00:47:42 +01:00
2017-02-12 00:47:42 +01:00
2017-07-11 17:44:59 +02:00
2017-02-12 00:47:42 +01:00
2017-02-24 16:09:22 +01:00
2017-02-24 16:09:22 +01:00
2017-04-03 17:11:40 +02:00
2017-04-03 17:11:40 +02:00
2017-10-26 14:45:57 +02:00
2017-10-26 14:45:57 +02:00
2017-07-11 17:45:01 +02:00
2017-07-11 17:45:01 +02:00
2017-07-11 17:45:01 +02:00
2017-08-01 18:09:33 +02:00
2017-05-11 14:28:07 +02:00
2017-09-26 14:46:23 +02:00
2017-09-26 14:46:23 +02:00
2017-09-26 14:46:23 +02:00
2017-05-11 12:08:20 +02:00
2017-06-09 11:45:03 +02:00
2017-06-09 11:45:03 +02:00
2017-10-26 15:01:13 +02:00
2017-10-26 15:01:13 +02:00
2017-08-11 14:44:39 +02:00
2017-07-11 17:44:55 +02:00
2017-09-26 14:46:23 +02:00
2017-08-01 18:09:33 +02:00
2017-08-08 15:19:16 +02:00
2017-09-26 14:46:23 +02:00
2017-07-11 17:44:56 +02:00
2017-07-11 17:44:56 +02:00
2017-07-18 15:27:37 +02:00
2017-07-11 17:44:56 +02:00
2017-08-01 18:09:33 +02:00
2017-08-01 18:09:33 +02:00
2017-10-26 15:01:13 +02:00
2017-10-26 15:01:13 +02:00
2017-09-05 14:17:26 -05:00
2017-08-15 10:03:28 -05:00
2017-09-05 14:17:26 -05:00
2017-08-30 13:00:37 -05:00
2017-10-06 16:30:47 +02:00
2017-09-26 14:46:23 +02:00
2017-10-06 16:28:58 +02:00
2017-10-06 16:28:58 +02:00
2017-10-06 16:28:58 +02:00
2017-10-06 16:28:58 +02:00
2017-10-26 15:01:13 +02:00
2017-05-11 14:28:05 +02:00
2017-10-06 16:28:58 +02:00
2017-10-06 16:28:58 +02:00
2012-02-22 16:15:22 +01:00
2017-10-26 15:01:13 +02:00
2017-10-11 15:15:17 -03:00
2017-02-12 00:47:42 +01:00
2017-10-12 16:27:34 -05:00
2014-12-10 10:31:13 +01:00
2016-02-08 17:29:54 +01:00
2016-06-16 15:19:55 +02:00
2016-10-27 19:05:23 +02:00