* [Tarantool-patches] [PATCH v2 0/2] replication: fix uninitialized replica_version_id access
@ 2021-09-02 13:21 Serge Petrenko via Tarantool-patches
2021-09-02 13:21 ` [Tarantool-patches] [PATCH v2 1/2] box: remove unused variable in process_register() Serge Petrenko via Tarantool-patches
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Serge Petrenko via Tarantool-patches @ 2021-09-02 13:21 UTC (permalink / raw)
To: v.shpilevoy, gorcunov; +Cc: tarantool-patches
https://github.com/tarantool/tarantool/tree/sp/version-uninitialized-access
Changes in v2
- rework patch 2: instead of initializing version in process_subscribe(),
reset all parameters to default values in xrow_decode_subscribe().
Serge Petrenko (2):
box: remove unused variable in process_register()
xrow: reset parameters of decode_subscribe() to default
src/box/box.cc | 4 +---
src/box/xrow.c | 13 +++++++++++--
2 files changed, 12 insertions(+), 5 deletions(-)
--
2.30.1 (Apple Git-130)
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Tarantool-patches] [PATCH v2 1/2] box: remove unused variable in process_register()
2021-09-02 13:21 [Tarantool-patches] [PATCH v2 0/2] replication: fix uninitialized replica_version_id access Serge Petrenko via Tarantool-patches
@ 2021-09-02 13:21 ` Serge Petrenko via Tarantool-patches
2021-09-02 13:21 ` [Tarantool-patches] [PATCH v2 2/2] xrow: reset parameters of decode_subscribe() to default Serge Petrenko via Tarantool-patches
` (2 subsequent siblings)
3 siblings, 0 replies; 8+ messages in thread
From: Serge Petrenko via Tarantool-patches @ 2021-09-02 13:21 UTC (permalink / raw)
To: v.shpilevoy, gorcunov; +Cc: tarantool-patches
replica_version_id is unused in box_process_register,
so no point in filling it with anything coming from a remote instance.
Besides, version id isn't sent in register at all.
Follow-up #6034
---
src/box/box.cc | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/src/box/box.cc b/src/box/box.cc
index 0b12b1328..2c8113cbb 100644
--- a/src/box/box.cc
+++ b/src/box/box.cc
@@ -2616,9 +2616,7 @@ box_process_register(struct ev_io *io, struct xrow_header *header)
struct tt_uuid instance_uuid = uuid_nil;
struct vclock replica_vclock;
- uint32_t replica_version_id;
- xrow_decode_register_xc(header, &instance_uuid, &replica_vclock,
- &replica_version_id);
+ xrow_decode_register_xc(header, &instance_uuid, &replica_vclock, NULL);
if (!is_box_configured)
tnt_raise(ClientError, ER_LOADING);
--
2.30.1 (Apple Git-130)
^ permalink raw reply [flat|nested] 8+ messages in thread
* [Tarantool-patches] [PATCH v2 2/2] xrow: reset parameters of decode_subscribe() to default
2021-09-02 13:21 [Tarantool-patches] [PATCH v2 0/2] replication: fix uninitialized replica_version_id access Serge Petrenko via Tarantool-patches
2021-09-02 13:21 ` [Tarantool-patches] [PATCH v2 1/2] box: remove unused variable in process_register() Serge Petrenko via Tarantool-patches
@ 2021-09-02 13:21 ` Serge Petrenko via Tarantool-patches
2021-09-02 21:47 ` Vladislav Shpilevoy via Tarantool-patches
2021-09-02 17:34 ` [Tarantool-patches] [PATCH v2 0/2] replication: fix uninitialized replica_version_id access Cyrill Gorcunov via Tarantool-patches
2021-09-09 10:18 ` Kirill Yukhin via Tarantool-patches
3 siblings, 1 reply; 8+ messages in thread
From: Serge Petrenko via Tarantool-patches @ 2021-09-02 13:21 UTC (permalink / raw)
To: v.shpilevoy, gorcunov; +Cc: tarantool-patches
Nullify all the output parameters passed to xrow_decode_subscribe().
This should help us get rid of cases when some of the parameters were
left uninitialized when the SUBSCRIBE request didn't contain the
corresponding fields.
Follow-up #6034
---
src/box/xrow.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/src/box/xrow.c b/src/box/xrow.c
index 7df1af4ab..3cad2c1be 100644
--- a/src/box/xrow.c
+++ b/src/box/xrow.c
@@ -1561,10 +1561,19 @@ xrow_decode_subscribe(struct xrow_header *row, struct tt_uuid *replicaset_uuid,
return -1;
}
- if (anon)
+ if (replicaset_uuid != NULL)
+ *replicaset_uuid = uuid_nil;
+ if (instance_uuid != NULL)
+ *instance_uuid = uuid_nil;
+ if (vclock != NULL)
+ vclock_create(vclock);
+ if (version_id != NULL)
+ *version_id = 0;
+ if (anon != NULL)
*anon = false;
- if (id_filter)
+ if (id_filter != NULL)
*id_filter = 0;
+
d = data;
uint32_t map_size = mp_decode_map(&d);
for (uint32_t i = 0; i < map_size; i++) {
--
2.30.1 (Apple Git-130)
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Tarantool-patches] [PATCH v2 0/2] replication: fix uninitialized replica_version_id access
2021-09-02 13:21 [Tarantool-patches] [PATCH v2 0/2] replication: fix uninitialized replica_version_id access Serge Petrenko via Tarantool-patches
2021-09-02 13:21 ` [Tarantool-patches] [PATCH v2 1/2] box: remove unused variable in process_register() Serge Petrenko via Tarantool-patches
2021-09-02 13:21 ` [Tarantool-patches] [PATCH v2 2/2] xrow: reset parameters of decode_subscribe() to default Serge Petrenko via Tarantool-patches
@ 2021-09-02 17:34 ` Cyrill Gorcunov via Tarantool-patches
2021-09-09 10:18 ` Kirill Yukhin via Tarantool-patches
3 siblings, 0 replies; 8+ messages in thread
From: Cyrill Gorcunov via Tarantool-patches @ 2021-09-02 17:34 UTC (permalink / raw)
To: Serge Petrenko; +Cc: v.shpilevoy, tarantool-patches
On Thu, Sep 02, 2021 at 04:21:32PM +0300, Serge Petrenko wrote:
> https://github.com/tarantool/tarantool/tree/sp/version-uninitialized-access
>
> Changes in v2
> - rework patch 2: instead of initializing version in process_subscribe(),
> reset all parameters to default values in xrow_decode_subscribe().
Ack. Though I've been fine with v1 as well :)
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Tarantool-patches] [PATCH v2 2/2] xrow: reset parameters of decode_subscribe() to default
2021-09-02 13:21 ` [Tarantool-patches] [PATCH v2 2/2] xrow: reset parameters of decode_subscribe() to default Serge Petrenko via Tarantool-patches
@ 2021-09-02 21:47 ` Vladislav Shpilevoy via Tarantool-patches
2021-09-06 8:06 ` Serge Petrenko via Tarantool-patches
0 siblings, 1 reply; 8+ messages in thread
From: Vladislav Shpilevoy via Tarantool-patches @ 2021-09-02 21:47 UTC (permalink / raw)
To: Serge Petrenko, gorcunov; +Cc: tarantool-patches
Hi! Thanks for the fixes!
Now you can drop:
applier.cc:1256: cluster_id = uuid_nil;
applier.cc:1292: vclock_create(&applier->remote_vclock_at_subscribe);
box.cc:2617: instance_uuid = uuid_nil;
box.cc:2850: replica_uuid = uuid_nil;
box.cc:2851: peer_replicaset_uuid = uuid_nil;
box.cc:2854: vclock_create(&replica_clock);
relay.cc:687: vclock_create(&relay->recv_vclock);
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Tarantool-patches] [PATCH v2 2/2] xrow: reset parameters of decode_subscribe() to default
2021-09-02 21:47 ` Vladislav Shpilevoy via Tarantool-patches
@ 2021-09-06 8:06 ` Serge Petrenko via Tarantool-patches
2021-09-07 21:46 ` Vladislav Shpilevoy via Tarantool-patches
0 siblings, 1 reply; 8+ messages in thread
From: Serge Petrenko via Tarantool-patches @ 2021-09-06 8:06 UTC (permalink / raw)
To: Vladislav Shpilevoy, gorcunov; +Cc: tarantool-patches
03.09.2021 00:47, Vladislav Shpilevoy пишет:
> Hi! Thanks for the fixes!
>
> Now you can drop:
>
> applier.cc:1256: cluster_id = uuid_nil;
> applier.cc:1292: vclock_create(&applier->remote_vclock_at_subscribe);
>
> box.cc:2617: instance_uuid = uuid_nil;
> box.cc:2850: replica_uuid = uuid_nil;
> box.cc:2851: peer_replicaset_uuid = uuid_nil;
> box.cc:2854: vclock_create(&replica_clock);
>
> relay.cc:687: vclock_create(&relay->recv_vclock);
Hi!
Ok:
diff --git a/src/box/applier.cc b/src/box/applier.cc
index 9256078e1..b981bd436 100644
--- a/src/box/applier.cc
+++ b/src/box/applier.cc
@@ -1289,7 +1289,6 @@ applier_subscribe(struct applier *applier)
* the replica, and replica has to check whether
* its and master's cluster ids match.
*/
- vclock_create(&applier->remote_vclock_at_subscribe);
xrow_decode_subscribe_response_xc(&row, &cluster_id,
&applier->remote_vclock_at_subscribe);
applier->instance_id = row.replica_id;
diff --git a/src/box/box.cc b/src/box/box.cc
index 2c8113cbb..c5797fe58 100644
--- a/src/box/box.cc
+++ b/src/box/box.cc
@@ -2614,7 +2614,7 @@ box_process_register(struct ev_io *io, struct
xrow_header *header)
{
assert(header->type == IPROTO_REGISTER);
- struct tt_uuid instance_uuid = uuid_nil;
+ struct tt_uuid instance_uuid;
struct vclock replica_vclock;
xrow_decode_register_xc(header, &instance_uuid, &replica_vclock,
NULL);
@@ -2740,8 +2740,8 @@ box_process_join(struct ev_io *io, struct
xrow_header *header)
assert(header->type == IPROTO_JOIN);
/* Decode JOIN request */
- struct tt_uuid instance_uuid = uuid_nil;
- uint32_t replica_version_id = 0;
+ struct tt_uuid instance_uuid;
+ uint32_t replica_version_id;
xrow_decode_join_xc(header, &instance_uuid, &replica_version_id);
/* Check that bootstrap has been finished */
@@ -2847,11 +2847,10 @@ box_process_subscribe(struct ev_io *io, struct
xrow_header *header)
if (!is_box_configured)
tnt_raise(ClientError, ER_LOADING);
- struct tt_uuid replica_uuid = uuid_nil;
- struct tt_uuid peer_replicaset_uuid = uuid_nil;
+ struct tt_uuid replica_uuid;
+ struct tt_uuid peer_replicaset_uuid;
struct vclock replica_clock;
uint32_t replica_version_id;
- vclock_create(&replica_clock);
bool anon;
uint32_t id_filter;
xrow_decode_subscribe_xc(header, &peer_replicaset_uuid, &replica_uuid,
diff --git a/src/box/relay.cc b/src/box/relay.cc
index 2947468ba..f5852df7b 100644
--- a/src/box/relay.cc
+++ b/src/box/relay.cc
@@ -683,8 +683,6 @@ relay_reader_f(va_list ap)
struct xrow_header xrow;
coio_read_xrow_timeout_xc(&io, &ibuf, &xrow,
replication_disconnect_timeout());
- /* vclock is followed while decoding, zeroing it. */
- vclock_create(&relay->recv_vclock);
xrow_decode_vclock_xc(&xrow, &relay->recv_vclock);
/*
* Replica send us last replicated transaction
--
Serge Petrenko
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Tarantool-patches] [PATCH v2 2/2] xrow: reset parameters of decode_subscribe() to default
2021-09-06 8:06 ` Serge Petrenko via Tarantool-patches
@ 2021-09-07 21:46 ` Vladislav Shpilevoy via Tarantool-patches
0 siblings, 0 replies; 8+ messages in thread
From: Vladislav Shpilevoy via Tarantool-patches @ 2021-09-07 21:46 UTC (permalink / raw)
To: Serge Petrenko, gorcunov; +Cc: tarantool-patches
Hi! Good job on the fixes!
LGTM.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Tarantool-patches] [PATCH v2 0/2] replication: fix uninitialized replica_version_id access
2021-09-02 13:21 [Tarantool-patches] [PATCH v2 0/2] replication: fix uninitialized replica_version_id access Serge Petrenko via Tarantool-patches
` (2 preceding siblings ...)
2021-09-02 17:34 ` [Tarantool-patches] [PATCH v2 0/2] replication: fix uninitialized replica_version_id access Cyrill Gorcunov via Tarantool-patches
@ 2021-09-09 10:18 ` Kirill Yukhin via Tarantool-patches
3 siblings, 0 replies; 8+ messages in thread
From: Kirill Yukhin via Tarantool-patches @ 2021-09-09 10:18 UTC (permalink / raw)
To: Serge Petrenko; +Cc: tarantool-patches, v.shpilevoy
Hello,
On 02 сен 16:21, Serge Petrenko via Tarantool-patches wrote:
> https://github.com/tarantool/tarantool/tree/sp/version-uninitialized-access
>
> Changes in v2
> - rework patch 2: instead of initializing version in process_subscribe(),
> reset all parameters to default values in xrow_decode_subscribe().
I've checked your patch into 2.8 and master.
--
Regards, Kirill Yukhin
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2021-09-09 10:18 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-02 13:21 [Tarantool-patches] [PATCH v2 0/2] replication: fix uninitialized replica_version_id access Serge Petrenko via Tarantool-patches
2021-09-02 13:21 ` [Tarantool-patches] [PATCH v2 1/2] box: remove unused variable in process_register() Serge Petrenko via Tarantool-patches
2021-09-02 13:21 ` [Tarantool-patches] [PATCH v2 2/2] xrow: reset parameters of decode_subscribe() to default Serge Petrenko via Tarantool-patches
2021-09-02 21:47 ` Vladislav Shpilevoy via Tarantool-patches
2021-09-06 8:06 ` Serge Petrenko via Tarantool-patches
2021-09-07 21:46 ` Vladislav Shpilevoy via Tarantool-patches
2021-09-02 17:34 ` [Tarantool-patches] [PATCH v2 0/2] replication: fix uninitialized replica_version_id access Cyrill Gorcunov via Tarantool-patches
2021-09-09 10:18 ` Kirill Yukhin via Tarantool-patches
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox