FAILED: patch "[PATCH] hv: utils: handle and propagate errors in kvp_register" failed to apply to 5.15-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.15-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.15.y
git checkout FETCH_HEAD
git cherry-pick -x 3fcf923302a8f5c0dc3af3d2ca2657cb5fae4297
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026061505-another-sensually-b0cb@gregkh' --subject-prefix 'PATCH 5.15.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 3fcf923302a8f5c0dc3af3d2ca2657cb5fae4297 Mon Sep 17 00:00:00 2001
From: Thorsten Blum <[email protected]>
Date: Tue, 14 Apr 2026 13:10:08 +0200
Subject: [PATCH] hv: utils: handle and propagate errors in kvp_register
Make kvp_register() return an error code instead of silently ignoring failures, and propagate the error from kvp_handle_handshake() instead of returning success.
This propagates both kzalloc_obj() and hvutil_transport_send() failures to kvp_handle_handshake() and thus to kvp_on_msg().
drivers/hv/hv_kvp.c +13 -12
@@ -93,7 +93,7 @@ static void kvp_send_key(struct work_struct *dummy);static void kvp_respond_to_host (struct hv_kvp_msg *msg,int error);static void kvp_timeout_func (struct work_struct *dummy);static void kvp_host_handshake_func (struct work_struct *dummy); -static void kvp_register (int ); +static int kvp_register (int ); static DECLARE_DELAYED_WORK(kvp_timeout_work, kvp_timeout_func); static DECLARE_DELAYED_WORK(kvp_host_handshake_work, kvp_host_handshake_func);
@@ -127,24 +127,26 @@ static void kvp_register_done(void)hv_poll_channel (kvp_transaction.recv_channel, kvp_poll_wrapper); } -static void +static int kvp_register (int reg_value) {struct hv_kvp_msg *kvp_msg;char *version; +int ret; kvp_msg =kzalloc_obj (*kvp_msg); +if (!kvp_msg) +return -ENOMEM ; -if (kvp_msg) { - version = kvp_msg->body.kvp_register.version; - kvp_msg->kvp_hdr.operation = reg_value; -strcpy (version,HV_DRV_VERSION ); + version = kvp_msg->body.kvp_register.version; + kvp_msg->kvp_hdr.operation = reg_value; +strcpy (version,HV_DRV_VERSION ); -hvutil_transport_send (hvt, kvp_msg,sizeof (*kvp_msg), - kvp_register_done); -kfree (kvp_msg); - } + ret =hvutil_transport_send (hvt, kvp_msg,sizeof (*kvp_msg), + kvp_register_done); +kfree (kvp_msg); +return ret; }static void kvp_timeout_func (struct work_struct *dummy)
@@ -186,9 +188,8 @@ static int kvp_handle_handshake(struct hv_kvp_msg *msg)*/ pr_debug ("KVP: userspace daemon ver. %d connected\n" , msg->kvp_hdr.operation); -kvp_register (dm_reg_value); -return 0 ; +return kvp_register (dm_reg_value); }
Sasha Levin
maintainerPATCH 1/1 hv: utils: handle and propagate errors in kvp_register
From: Thorsten Blum <[email protected]>
[ Upstream commit 3fcf923302a8f5c0dc3af3d2ca2657cb5fae4297 ]
Make kvp_register() return an error code instead of silently ignoring failures, and propagate the error from kvp_handle_handshake() instead of returning success.
This propagates both kzalloc_obj() and hvutil_transport_send() failures to kvp_handle_handshake() and thus to kvp_on_msg().
--- drivers/hv/hv_kvp.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-)
drivers/hv/hv_kvp.c +13 -12
@@ -93,7 +93,7 @@ static void kvp_send_key(struct work_struct *dummy);static void kvp_respond_to_host (struct hv_kvp_msg *msg,int error);static void kvp_timeout_func (struct work_struct *dummy);static void kvp_host_handshake_func (struct work_struct *dummy); -static void kvp_register (int ); +static int kvp_register (int ); static DECLARE_DELAYED_WORK(kvp_timeout_work, kvp_timeout_func); static DECLARE_DELAYED_WORK(kvp_host_handshake_work, kvp_host_handshake_func);
@@ -127,24 +127,26 @@ static void kvp_register_done(void)hv_poll_channel (kvp_transaction.recv_channel, kvp_poll_wrapper); } -static void +static int kvp_register (int reg_value) {struct hv_kvp_msg *kvp_msg;char *version; +int ret; kvp_msg =kzalloc (sizeof (*kvp_msg),GFP_KERNEL ); +if (!kvp_msg) +return -ENOMEM ; -if (kvp_msg) { - version = kvp_msg->body.kvp_register.version; - kvp_msg->kvp_hdr.operation = reg_value; -strcpy (version,HV_DRV_VERSION ); + version = kvp_msg->body.kvp_register.version; + kvp_msg->kvp_hdr.operation = reg_value; +strcpy (version,HV_DRV_VERSION ); -hvutil_transport_send (hvt, kvp_msg,sizeof (*kvp_msg), - kvp_register_done); -kfree (kvp_msg); - } + ret =hvutil_transport_send (hvt, kvp_msg,sizeof (*kvp_msg), + kvp_register_done); +kfree (kvp_msg); +return ret; }static void kvp_timeout_func (struct work_struct *dummy)
@@ -186,9 +188,8 @@ static int kvp_handle_handshake(struct hv_kvp_msg *msg)*/ pr_debug ("KVP: userspace daemon ver. %d connected\n" , msg->kvp_hdr.operation); -kvp_register (dm_reg_value); -return 0 ; +return kvp_register (dm_reg_value); }
Signature · 1 line
2.53.0