From nobody Wed Dec 24 18:01:53 2025 Received: from mail-pf1-f175.google.com (mail-pf1-f175.google.com [209.85.210.175]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CC8D68615D; Wed, 24 Jan 2024 17:47:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706118437; cv=none; b=HP5k+GwkqWqV3C8yYTzIqe4cXcECY1AUoL3Ce45IwjvlJeGQcRL9NChxF2buMYRfdFfaNznSr801RvqayDXivv+Y06WZWriN2iQzfJ3CWheiCHhfn4Dx+0SZ3tNLuFAnSUTy9Tc+MGdL7lRPW8YJkZlXxKicb8HJGwSavkps/8c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706118437; c=relaxed/simple; bh=s3tKx9YDYT51+QXp1CdeWhCE59bgmZCtnv1eFlCrWyA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UqcKer7nXnKJ2SQlY9uZHOj+4RRgganNot1FvqJZ5xTognlQ4XWOW7cidroklDEA3wqTnTWhdgIIIXTMsSlqWiCvbbexwqU2URTai68RqCc+2sd80v3lhkwkX36AeH/Y6Hj8a0fUBISXTzMsXDpPGJ5hKn03l7XXURr5jJwSYTs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=gGVqIQur; arc=none smtp.client-ip=209.85.210.175 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gGVqIQur" Received: by mail-pf1-f175.google.com with SMTP id d2e1a72fcca58-6dd7b525cd6so1636913b3a.2; Wed, 24 Jan 2024 09:47:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706118435; x=1706723235; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=5a7ZVpYjt4glIMRdLh4WlPExoPNat5beHZOUQY5BsC8=; b=gGVqIQurEaMo3tLoJeZrqMMO0q7AatnxmBmqh+1djVTSm2bm60kLE/LMm5eDbb6ngw dPZ3ddh95LSC9YPDGZ+xFWDQb/7r5bTXtQRF+K+BpTivCl16EsBGyoGJvPHC69Dp/UJ+ HoSb+7uwc8bI6ZBcdN/gf8aykBG/FK0WZXrRhqhhUdpPZXUtSjflU4S+7cZWtGcwB13n NM3Hi9ykeQoDAeE1DYKiDuQtwZaxyIBNb464xAkCqEUwHOQRlHUTPyNd7Vxh+0B46zzc 7l0jHrNKncPfmIOpdt6AlpakRbwHp9LwUnTYPaOaZOPVUowgUXNHzMWYWOWAXb/2nDPD +Kqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706118435; x=1706723235; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5a7ZVpYjt4glIMRdLh4WlPExoPNat5beHZOUQY5BsC8=; b=DLSJLD3n3ePYiKa8lrTDqgX9JJepVUvIDaXPwFT9d0xe7p8w5jdGUyuPLkV2mWXmXb ui9rECgyH2+2I7ojaon1+eY6IlndjlwI0Sge7huCguUjH7uJ/V6PUkNGzEuHnVKekmy4 3SmjjXAHf+b9fPUt9iKXqMXM5dEs9KDOq46pkCO5Q8rBzdFqSgsDd56mErAUVfM2iczu CEXJrMjvpcVwMw6P/530XFhxaXKRTM+2XRLSR4P5ND4FaTExv4L6MBOuaBNkkf3vfF9e xyatO5XwrNyiMnda3aoD3lu/nEY0qG9sXGfgEFXlR2I8q1J56mHLz5sRwE/bZduowze4 XlWg== X-Gm-Message-State: AOJu0YzzBDE53WdJ7vl11GLskOUwYMmivrikYno7n3O33rYBgvsJC0Dw ojGxbS4Quck+49AXn7Oa8okm9HXVzyBxpimuIaUdwfNCaoZxhPo2xuucJF4x X-Google-Smtp-Source: AGHT+IGs6/sPxiwsiqboKf3NTC/pRHlQL1NFRL2qILAmDDjPkZjjLa5FgIT+lNJQ07puwzt8L2e1ZQ== X-Received: by 2002:a05:6a00:1d24:b0:6dd:c48c:4d8d with SMTP id a36-20020a056a001d2400b006ddc48c4d8dmr102079pfx.46.1706118435122; Wed, 24 Jan 2024 09:47:15 -0800 (PST) Received: from localhost ([2601:644:9380:8cd0::7fb4]) by smtp.gmail.com with ESMTPSA id y22-20020a62b516000000b006dbd2405882sm8401518pfe.148.2024.01.24.09.47.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jan 2024 09:47:14 -0800 (PST) From: Matthew Wood To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: leitao@debian.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v1 1/8] net: netconsole: cleanup formatting lints Date: Wed, 24 Jan 2024 09:46:59 -0800 Message-ID: <20240124174711.1906102-2-thepacketgeek@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240124174711.1906102-1-thepacketgeek@gmail.com> References: <20240124174711.1906102-1-thepacketgeek@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Address checkpatch lint suggestions in preparation for later changes Signed-off-by: Matthew Wood --- drivers/net/netconsole.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 6e14ba5e06c8..93fc3b509706 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -49,7 +49,7 @@ static char config[MAX_PARAM_LENGTH]; module_param_string(netconsole, config, MAX_PARAM_LENGTH, 0); MODULE_PARM_DESC(netconsole, " netconsole=3D[src-port]@[src-ip]/[dev],[tgt= -port]@/[tgt-macaddr]"); =20 -static bool oops_only =3D false; +static bool oops_only; module_param(oops_only, bool, 0600); MODULE_PARM_DESC(oops_only, "Only log oops messages"); =20 @@ -501,6 +501,7 @@ static ssize_t local_ip_store(struct config_item *item,= const char *buf, =20 if (strnchr(buf, count, ':')) { const char *end; + if (in6_pton(buf, count, nt->np.local_ip.in6.s6_addr, -1, &end) > 0) { if (*end && *end !=3D '\n') { pr_err("invalid IPv6 address at: <%c>\n", *end); @@ -510,9 +511,9 @@ static ssize_t local_ip_store(struct config_item *item,= const char *buf, } else goto out_unlock; } else { - if (!nt->np.ipv6) { + if (!nt->np.ipv6) nt->np.local_ip.ip =3D in_aton(buf); - } else + else goto out_unlock; } =20 @@ -537,6 +538,7 @@ static ssize_t remote_ip_store(struct config_item *item= , const char *buf, =20 if (strnchr(buf, count, ':')) { const char *end; + if (in6_pton(buf, count, nt->np.remote_ip.in6.s6_addr, -1, &end) > 0) { if (*end && *end !=3D '\n') { pr_err("invalid IPv6 address at: <%c>\n", *end); @@ -546,9 +548,9 @@ static ssize_t remote_ip_store(struct config_item *item= , const char *buf, } else goto out_unlock; } else { - if (!nt->np.ipv6) { + if (!nt->np.ipv6) nt->np.remote_ip.ip =3D in_aton(buf); - } else + else goto out_unlock; } =20 @@ -781,6 +783,7 @@ static int netconsole_netdev_event(struct notifier_bloc= k *this, spin_unlock_irqrestore(&target_list_lock, flags); if (stopped) { const char *msg =3D "had an event"; + switch (event) { case NETDEV_UNREGISTER: msg =3D "unregistered"; --=20 2.43.0 From nobody Wed Dec 24 18:01:53 2025 Received: from mail-pl1-f171.google.com (mail-pl1-f171.google.com [209.85.214.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 85DCB129A75; Wed, 24 Jan 2024 17:47:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706118440; cv=none; b=DIVmdhqBjw3gMYb9bg/4NsaMblum2qhHcpMczN2ZKqNi2npBY6N9G1236184nt/0wGW1IvE3fTU91qE9NnwmnGJkgd+VyY6TjKrCvAJUF9AUswTUgkYzDHixSheiDUlT9URrewqaLsi0MvXRsqcllVdcP/hZLW2pSSHOHGzEWbc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706118440; c=relaxed/simple; bh=TkD/7afEOAUYVVvFi9uEo60vgXmIeQpiZhHvrjTnZfU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dfsBoKMCeaVmNZ8zjem07qk4yba2XNBpwkmo19CrpIEVgv6R6tyywYTbzLjt1hC9qQaoborA+1vJlZg+D4COk/zMjSKFEUAicM3NEp7VyOGkeviG+bSmpIzxfNrwzYhWkCrD1ze8roXyV7RBwK26ep5GoXomxhGAYXA8lpXZdgg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Ov/jQv3V; arc=none smtp.client-ip=209.85.214.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Ov/jQv3V" Received: by mail-pl1-f171.google.com with SMTP id d9443c01a7336-1d731314e67so20452715ad.1; Wed, 24 Jan 2024 09:47:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706118438; x=1706723238; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=g2riTuEepe/mUCMr3Pq4qIV5z/xG84DnFng4TZ3aCOM=; b=Ov/jQv3VpXNL41tRtMMKv8I2hDUNg7UMPVVFYF7wyFqOAYMfoaNQZG0L0hATqta9S9 k9wYPYr0q5yoUkruVXZ7FXcCQKGP6EEtCfdgB5NBq45WTTJ8dZOEHXbWDDqwVC/tlD1/ dwgCxGv0VQSdifBa3126hEsytCYCUROknGCgc/zsdWOWzyu6N7g7+CJzecxTPVM1Luzq 3auv1sgiCenVorlVX8doPkB9wqN/6yYimptmpmUIEuGQoM/yKV2povBpQrgtuh+7m0Vo f/ZmLTCAwxIpyYt+jZIJZsylhi0AXd6XnWgov8ZasQscEgFtA0+FFJ4NkqbCbVkbudpZ D3xQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706118438; x=1706723238; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=g2riTuEepe/mUCMr3Pq4qIV5z/xG84DnFng4TZ3aCOM=; b=YAYCE1Bh0IVTWYxaRAgsG3HxydYCrRUc1Z7InjjJwNcrgfBZeI5cKZIgXIMcfm70t2 8nAaxmQBIN2fiNV5EK1E5dEBrRN5jSYho9+h8FqmVB3lqCH2n1ICm8Ka1DRnv4D/HzE2 lwAZNVhnJnn6FhQ58OdE6NutMXzXms4fzOdQnfh3rZ8dgeCArq8QLJHuxo6NIgOeS54c nC6cHO6vi/QG0kyedoHaHYkKxz/3kgGL0Lsi9i7Q7BOp8OSNQGdoUPVRuSxUOC9NxFN0 FCcPQhIRVx/WY4jKLHpmPKxFhZierv2Lq2LE90DMIHiefaCSUwffSyZoCEiTkTQhXRS1 TzWg== X-Gm-Message-State: AOJu0YzKkXjoDw3DHpe4KVHSy2hyqZFNv7Hf0BvZC/vb457zg7Fd2mTQ aXnsVgYcjw7+Sjg9jcuqLl83m2iEI1H0mqIOc4TdFcKrrJho0op5 X-Google-Smtp-Source: AGHT+IHPILvOnHNGuFqWVxNSI/EpMY7ZDayJzLHwYh06YXl06KCUCYCzokJKyfYpPr43PnSANBUZwQ== X-Received: by 2002:a17:902:d48e:b0:1d4:b37a:e0a8 with SMTP id c14-20020a170902d48e00b001d4b37ae0a8mr993977plg.118.1706118437795; Wed, 24 Jan 2024 09:47:17 -0800 (PST) Received: from localhost ([2601:644:9380:8cd0::7fb4]) by smtp.gmail.com with ESMTPSA id p7-20020a170902b08700b001d733c88646sm6965518plr.216.2024.01.24.09.47.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jan 2024 09:47:17 -0800 (PST) From: Matthew Wood To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: leitao@debian.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v1 2/8] net: netconsole: move netconsole_target config_item to config_group Date: Wed, 24 Jan 2024 09:47:00 -0800 Message-ID: <20240124174711.1906102-3-thepacketgeek@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240124174711.1906102-1-thepacketgeek@gmail.com> References: <20240124174711.1906102-1-thepacketgeek@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In order to support a nested userdata config_group in later patches, use a config_group for netconsole_target instead of a config_item. It's a no-op functionality-wise, since config_group maintains all features of a config_item via the cg_item member. Signed-off-by: Matthew Wood --- drivers/net/netconsole.c | 59 ++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 27 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 93fc3b509706..5e720bcf7102 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -102,7 +102,7 @@ static struct console netconsole_ext; struct netconsole_target { struct list_head list; #ifdef CONFIG_NETCONSOLE_DYNAMIC - struct config_item item; + struct config_group group; #endif bool enabled; bool extended; @@ -134,14 +134,14 @@ static void __exit dynamic_netconsole_exit(void) */ static void netconsole_target_get(struct netconsole_target *nt) { - if (config_item_name(&nt->item)) - config_item_get(&nt->item); + if (config_item_name(&nt->group.cg_item)) + config_group_get(&nt->group); } =20 static void netconsole_target_put(struct netconsole_target *nt) { - if (config_item_name(&nt->item)) - config_item_put(&nt->item); + if (config_item_name(&nt->group.cg_item)) + config_group_put(&nt->group); } =20 #else /* !CONFIG_NETCONSOLE_DYNAMIC */ @@ -221,9 +221,13 @@ static struct netconsole_target *alloc_and_init(void) =20 static struct netconsole_target *to_target(struct config_item *item) { - return item ? - container_of(item, struct netconsole_target, item) : - NULL; + struct config_group *cfg_group; + + cfg_group =3D to_config_group(item); + if (!cfg_group) + return NULL; + return container_of(to_config_group(item), + struct netconsole_target, group); } =20 /* @@ -370,7 +374,7 @@ static ssize_t release_store(struct config_item *item, = const char *buf, mutex_lock(&dynamic_netconsole_mutex); if (nt->enabled) { pr_err("target (%s) is enabled, disable to update parameters\n", - config_item_name(&nt->item)); + config_item_name(&nt->group.cg_item)); err =3D -EINVAL; goto out_unlock; } @@ -398,7 +402,7 @@ static ssize_t extended_store(struct config_item *item,= const char *buf, mutex_lock(&dynamic_netconsole_mutex); if (nt->enabled) { pr_err("target (%s) is enabled, disable to update parameters\n", - config_item_name(&nt->item)); + config_item_name(&nt->group.cg_item)); err =3D -EINVAL; goto out_unlock; } @@ -425,7 +429,7 @@ static ssize_t dev_name_store(struct config_item *item,= const char *buf, mutex_lock(&dynamic_netconsole_mutex); if (nt->enabled) { pr_err("target (%s) is enabled, disable to update parameters\n", - config_item_name(&nt->item)); + config_item_name(&nt->group.cg_item)); mutex_unlock(&dynamic_netconsole_mutex); return -EINVAL; } @@ -450,7 +454,7 @@ static ssize_t local_port_store(struct config_item *ite= m, const char *buf, mutex_lock(&dynamic_netconsole_mutex); if (nt->enabled) { pr_err("target (%s) is enabled, disable to update parameters\n", - config_item_name(&nt->item)); + config_item_name(&nt->group.cg_item)); goto out_unlock; } =20 @@ -473,7 +477,7 @@ static ssize_t remote_port_store(struct config_item *it= em, mutex_lock(&dynamic_netconsole_mutex); if (nt->enabled) { pr_err("target (%s) is enabled, disable to update parameters\n", - config_item_name(&nt->item)); + config_item_name(&nt->group.cg_item)); goto out_unlock; } =20 @@ -495,7 +499,7 @@ static ssize_t local_ip_store(struct config_item *item,= const char *buf, mutex_lock(&dynamic_netconsole_mutex); if (nt->enabled) { pr_err("target (%s) is enabled, disable to update parameters\n", - config_item_name(&nt->item)); + config_item_name(&nt->group.cg_item)); goto out_unlock; } =20 @@ -532,7 +536,7 @@ static ssize_t remote_ip_store(struct config_item *item= , const char *buf, mutex_lock(&dynamic_netconsole_mutex); if (nt->enabled) { pr_err("target (%s) is enabled, disable to update parameters\n", - config_item_name(&nt->item)); + config_item_name(&nt->group.cg_item)); goto out_unlock; } =20 @@ -570,7 +574,7 @@ static ssize_t remote_mac_store(struct config_item *ite= m, const char *buf, mutex_lock(&dynamic_netconsole_mutex); if (nt->enabled) { pr_err("target (%s) is enabled, disable to update parameters\n", - config_item_name(&nt->item)); + config_item_name(&nt->group.cg_item)); goto out_unlock; } =20 @@ -638,7 +642,7 @@ static struct netconsole_target *find_cmdline_target(co= nst char *name) =20 spin_lock_irqsave(&target_list_lock, flags); list_for_each_entry(nt, &target_list, list) { - if (!strcmp(nt->item.ci_name, name)) { + if (!strcmp(nt->group.cg_item.ci_name, name)) { ret =3D nt; break; } @@ -652,8 +656,8 @@ static struct netconsole_target *find_cmdline_target(co= nst char *name) * Group operations and type for netconsole_subsys. */ =20 -static struct config_item *make_netconsole_target(struct config_group *gro= up, - const char *name) +static struct config_group *make_netconsole_target(struct config_group *gr= oup, + const char *name) { struct netconsole_target *nt; unsigned long flags; @@ -665,8 +669,9 @@ static struct config_item *make_netconsole_target(struc= t config_group *group, if (!strncmp(name, NETCONSOLE_PARAM_TARGET_PREFIX, strlen(NETCONSOLE_PARAM_TARGET_PREFIX))) { nt =3D find_cmdline_target(name); - if (nt) - return &nt->item; + if (nt) { + return &nt->group; + } } =20 nt =3D alloc_and_init(); @@ -674,14 +679,14 @@ static struct config_item *make_netconsole_target(str= uct config_group *group, return ERR_PTR(-ENOMEM); =20 /* Initialize the config_item member */ - config_item_init_type_name(&nt->item, name, &netconsole_target_type); + config_group_init_type_name(&nt->group, name, &netconsole_target_type); =20 /* Adding, but it is disabled */ spin_lock_irqsave(&target_list_lock, flags); list_add(&nt->list, &target_list); spin_unlock_irqrestore(&target_list_lock, flags); =20 - return &nt->item; + return &nt->group; } =20 static void drop_netconsole_target(struct config_group *group, @@ -701,11 +706,11 @@ static void drop_netconsole_target(struct config_grou= p *group, if (nt->enabled) netpoll_cleanup(&nt->np); =20 - config_item_put(&nt->item); + config_item_put(&nt->group.cg_item); } =20 static struct configfs_group_operations netconsole_subsys_group_ops =3D { - .make_item =3D make_netconsole_target, + .make_group =3D make_netconsole_target, .drop_item =3D drop_netconsole_target, }; =20 @@ -731,8 +736,8 @@ static void populate_configfs_item(struct netconsole_ta= rget *nt, =20 snprintf(target_name, sizeof(target_name), "%s%d", NETCONSOLE_PARAM_TARGET_PREFIX, cmdline_count); - config_item_init_type_name(&nt->item, target_name, - &netconsole_target_type); + config_group_init_type_name(&nt->group, target_name, + &netconsole_target_type); } =20 #endif /* CONFIG_NETCONSOLE_DYNAMIC */ --=20 2.43.0 From nobody Wed Dec 24 18:01:53 2025 Received: from mail-pl1-f181.google.com (mail-pl1-f181.google.com [209.85.214.181]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7AE6312A143; Wed, 24 Jan 2024 17:47:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706118441; cv=none; b=Eafep/BjPLLrno/4r96roFaKUTikmN49bGeXAJfSzIS+LxN0tq6/dXmgmUcg9NKLS1zDmQmpe2Dwy655Bx9thaOn2pamF+cwtj8bHF1tWJghb7E/eG5mIw/3ZgHFNQaC1yPrlMUrkrPpxnbQ/LUknsgjrNkIq3vWIOyHYcXYhoA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706118441; c=relaxed/simple; bh=/YjWyaqPnZDamee11YunAkZPyfaZp6y28fWxTHZ2aeY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QFlonY8OSZJV7yMCNrEhgClVknfhV4FQbU5pgdJjQu/TMlKuTBHzUeDE21dhBGxNtwDTo9ijyeHlEp0wygsOZNfgDAsH4rQRp/I81etgQwttrTSKLMBfQrd6SkmdN+PGK9F3P4zXyFkQ6iDhhfezRUOhQUZGUt1UDvL+01K5R9c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=fMbozi4L; arc=none smtp.client-ip=209.85.214.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="fMbozi4L" Received: by mail-pl1-f181.google.com with SMTP id d9443c01a7336-1d75c97ea6aso23789975ad.1; Wed, 24 Jan 2024 09:47:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706118440; x=1706723240; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=v77jF51yTqnOl3/nOY82fJC7PIH7X2Y2RU7dU3D2hPY=; b=fMbozi4LrRQ6tGLocq9T/NXkTCc5QXqmI8C8PHgG0d9Qb9jls+tiFh88jXxepwNE90 83bb0Z6JjiB8x5TrfmKrB+YAYvXlHU8LNFECKZWd5AZ3B+Ipr+I8juKWy6W01t9TPLZK jyETS7AJhoenN+FpcKNy5N1iZnIosqu/uSO1b72PzwAwSJHXTaWD7qIzpmFZ7UdVWG+W KC+o2mtEFM4aM6//UUYjculak0m4sZZOS3gvE5qZAGV8WWcCWVv4gUFZ6a+6d6tVNA2G d78P7ZhH8giQNkQnKtFLaH6rNJgYGdi1JPAmuqmf+uklShc4UwgdUw92gx/og7dOJUOY 7bGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706118440; x=1706723240; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=v77jF51yTqnOl3/nOY82fJC7PIH7X2Y2RU7dU3D2hPY=; b=uhc9ldi7F5BPMYseWvHBurfKwQd/udmCZ9sI23MDbAYc8wsslk73rHl39hr8Fa7L/D j6jOu29cUOe7JZSmvF3g5CHBYP6nPoRllwlJnWxuwBpEo8Jhfj97qi565VAmhja1DPhy KcahE2p9eq0eL0/XfZX7czr8qH/AIzufKu60wdom9BpGIKtASQ4JVJcjVUwNW2zon8mi HWtuLsIA0aJMO3W7YoElwjIdc1xjuwQmDrK2KLNiXTZL8kflf0VbfjCf42mEBdM60/BD woefvJPIhZ5n+cLDrj7XQU5vZf/HuQbrt5CIbEs+jfNlSsnaxjdeh+9YfLsMAgYA2buO 0maA== X-Gm-Message-State: AOJu0Yz8T6Q61VE+XBc3fotVElZB/8Hfyq6i8ZpHzw6rU8AaSDJJ/ybR w8N3MJVAWNTFQV5SGyV+kBGpdG6E4Rf/QxMlnUahkgMQ2AGoq+hz X-Google-Smtp-Source: AGHT+IHwFK8lZLxAYBatkNDzZ4Q93793g3sZJmZiJJC9Et983fMiom9Ns8uSgVmg0aEKN5JI+Opkfg== X-Received: by 2002:a17:903:2452:b0:1d7:8570:e53 with SMTP id l18-20020a170903245200b001d785700e53mr8332pls.38.1706118439847; Wed, 24 Jan 2024 09:47:19 -0800 (PST) Received: from localhost ([2601:644:9380:8cd0::7fb4]) by smtp.gmail.com with ESMTPSA id d4-20020a170902c18400b001d71649bf9asm9415460pld.252.2024.01.24.09.47.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jan 2024 09:47:19 -0800 (PST) From: Matthew Wood To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Christian Brauner Cc: leitao@debian.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v1 3/8] net: netconsole: move newline trimming to function Date: Wed, 24 Jan 2024 09:47:01 -0800 Message-ID: <20240124174711.1906102-4-thepacketgeek@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240124174711.1906102-1-thepacketgeek@gmail.com> References: <20240124174711.1906102-1-thepacketgeek@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move newline trimming logic from `dev_name_store()` to a new function (trim_newline()) for shared use in netconsole.c I was unable to find another useable version of this functionality that wasn't private to another driver (E.g. tools/testing/selftests/pidfd/pidfd_fdinfo_test.c) Signed-off-by: Matthew Wood --- drivers/net/netconsole.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 5e720bcf7102..586945e62210 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -230,6 +230,16 @@ static struct netconsole_target *to_target(struct conf= ig_item *item) struct netconsole_target, group); } =20 +/* Get rid of possible trailing newline, returning the new length */ +static void trim_newline(char *s, size_t maxlen) +{ + size_t len; + + len =3D strnlen(s, maxlen); + if (s[len - 1] =3D=3D '\n') + s[len - 1] =3D '\0'; +} + /* * Attribute operations for netconsole_target. */ @@ -424,7 +434,6 @@ static ssize_t dev_name_store(struct config_item *item,= const char *buf, size_t count) { struct netconsole_target *nt =3D to_target(item); - size_t len; =20 mutex_lock(&dynamic_netconsole_mutex); if (nt->enabled) { @@ -435,11 +444,7 @@ static ssize_t dev_name_store(struct config_item *item= , const char *buf, } =20 strscpy(nt->np.dev_name, buf, IFNAMSIZ); - - /* Get rid of possible trailing newline from echo(1) */ - len =3D strnlen(nt->np.dev_name, IFNAMSIZ); - if (nt->np.dev_name[len - 1] =3D=3D '\n') - nt->np.dev_name[len - 1] =3D '\0'; + trim_newline(nt->np.dev_name, IFNAMSIZ); =20 mutex_unlock(&dynamic_netconsole_mutex); return strnlen(buf, count); --=20 2.43.0 From nobody Wed Dec 24 18:01:53 2025 Received: from mail-pl1-f176.google.com (mail-pl1-f176.google.com [209.85.214.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8EE2812A16B; Wed, 24 Jan 2024 17:47:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.176 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706118445; cv=none; b=uEKe7QJl4Z/wjlkaQljKWMxZZtlP94KqKOsB8yzej9OB/ZR5f3TeKR6fq60WIKinp3LX7TkpkgF8TeNZOjkKqdY+G+6QzQ3/y/tJ+mIgbg26E9m8CG5/HmY13Fqi/a5RxlBzSQXYiqd7vziKvjY5qZGgvZcpwyUaLTRRB9n1wik= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706118445; c=relaxed/simple; bh=JUBz4HV56EeU4/nPAgND0SO1KSnQD6Dq6LeiFiNVnDw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Ia1PWMrhwcs8Lv8mDrX3j2PTLqQPPpw2ypuZsBa5tuMjIyi1r9xvjFt7vf2YGb1njdtdAJjJGCYUDKJ7G41Ya78dqH0VWpOq/+kyz0NHeGamTnFNltm4NGfWx17ytacLdgQAVqmbv5rVbJn/B4AVIeyNkELtWw/7SM4XpCqC5H0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ABzXQkTJ; arc=none smtp.client-ip=209.85.214.176 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ABzXQkTJ" Received: by mail-pl1-f176.google.com with SMTP id d9443c01a7336-1d720c7fc04so33999175ad.2; Wed, 24 Jan 2024 09:47:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706118442; x=1706723242; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=gneFCt4ceG2iUK09c51bLYD/2KQfSVJ2BvbrNzbdXrk=; b=ABzXQkTJh2DWgIeRs7Kca4RYpIiAmZOkEgIfajPbQk3opGCN0tmWIludURmhuiWcgp eQDY8ptddLqmC/Ba2PQ5x4zcavAop6EgGBPdvYHKFD0bUCCfY/FQ78Kumwpj+Le1v2Ms VKpAbJfUt52Febv+GgzgPonuZitNpaiP/tmi2vIfJSamEoD7CZDa/Jk7o/VdlZq5BRqS 2lwUV2j4RSNU1y4enZuRwLVsppWjwfS993o+7emd7AZ3r+YfZqO452hY4ut5W9kjNLWq jkvHbIZ/he9Lgy6BMgav3QIkAG6M/g7W+sRDdAN9DOCTkMlLgjlSaoEntuqXr6j0u6jP KjWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706118442; x=1706723242; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=gneFCt4ceG2iUK09c51bLYD/2KQfSVJ2BvbrNzbdXrk=; b=m1pQvVXuUBJTQA7LZM8Fp1vXF5AKfl4/XdBTXVzebanezxdBPPe9W6NDfZ+6/Xqief e46xU5cWWtgWuVFiNs9oO1pCaG88UZmarza/I5QLq+M9Qnk5vMk6tGHjvrxqSjoi2p0q iS0DQ3tyIo0WoL8+VeVFPwTqEyWmkx8eOoPVXbtK9qP9klMpw5OwVyPrVUrOA+kK+uxB px4ChpxrsvPHHu+3WTmBdaJ1hXQ+qtfVk8HRGyCrnKdGPu4Xd5HuQ7cv1HY59zvRIRY9 btRtndLfkzcbIuGfyO0HYy8ERbf1MjbWUttcgRjjFg8ZQJWJrB4jyqf0vnfvxOfJLBtf K9uw== X-Gm-Message-State: AOJu0YwIdDHk+fVeASmB3ZpAEKrqsJ1Q8TprH0DGmt7ZRyCSyGcdq7aw /n0KRTYbOqawRfwhabVXiv0Ff0GyZRugZq07cZmNrWxGUoaSMeab2mtn2W6C X-Google-Smtp-Source: AGHT+IHntv6ux5YegeJy5fbsfu7RHvSkcChc6KgWk1uYecoX9oMy6cYCDp+xy6SzcHEU2w/iX73N6A== X-Received: by 2002:a17:903:41c2:b0:1d7:6c80:644f with SMTP id u2-20020a17090341c200b001d76c80644fmr1210450ple.9.1706118441767; Wed, 24 Jan 2024 09:47:21 -0800 (PST) Received: from localhost ([2601:644:9380:8cd0::7fb4]) by smtp.gmail.com with ESMTPSA id z22-20020a1709028f9600b001d6fbbdcb82sm10665544plo.134.2024.01.24.09.47.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jan 2024 09:47:21 -0800 (PST) From: Matthew Wood To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Jonathan Corbet Cc: leitao@debian.org, netdev@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v1 4/8] net: netconsole: add docs for appending netconsole user data Date: Wed, 24 Jan 2024 09:47:02 -0800 Message-ID: <20240124174711.1906102-5-thepacketgeek@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240124174711.1906102-1-thepacketgeek@gmail.com> References: <20240124174711.1906102-1-thepacketgeek@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a new User Data section to the netconsole docs to describe the appending of user data capability (for netconsole dynamic configuration) with usage and netconsole output examples. Co-developed-by: Breno Leitao Signed-off-by: Breno Leitao Signed-off-by: Matthew Wood --- Documentation/networking/netconsole.rst | 68 +++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/Documentation/networking/netconsole.rst b/Documentation/networ= king/netconsole.rst index 390730a74332..54f072f47921 100644 --- a/Documentation/networking/netconsole.rst +++ b/Documentation/networking/netconsole.rst @@ -15,6 +15,8 @@ Extended console support by Tejun Heo , Ma= y 1 2015 =20 Release prepend support by Breno Leitao , Jul 7 2023 =20 +Userdata append support by Matthew Wood , Jan 22 = 2024 + Please send bug reports to Matt Mackall Satyam Sharma , and Cong Wang =20 @@ -171,6 +173,72 @@ You can modify these targets in runtime by creating th= e following targets:: cat cmdline1/remote_ip 10.0.0.3 =20 +Append User Data +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +Custom user data can be appended to the end of messages with netconsole +dynamic configuration enabled. User data entries can be modified without +changing the "enabled" attribute of a target. + +Directories (keys) under `userdata` are limited to 54 character length, and +data in `userdata//value` are limited to 200 bytes:: + + cd /sys/kernel/config/netconsole && mkdir cmdline0 + cd cmdline0 + mkdir userdata/foo + echo bar > userdata/foo/value + mkdir userdata/qux + echo baz > userdata/qux/value + +Messages will now include this additional user data:: + + echo "This is a message" > /dev/kmsg + +Sends:: + + 12,607,22085407756,-;This is a message + foo=3Dbar + qux=3Dbaz + +Preview the userdata that will be appended with:: + + cd /sys/kernel/config/netconsole/cmdline0/userdata + for f in `ls userdata`; do echo $f=3D$(cat userdata/$f/value); done + +If a `userdata` entry is created but no data is written to the `value` fil= e, +the entry will be omitted from netconsole messages:: + + cd /sys/kernel/config/netconsole && mkdir cmdline0 + cd cmdline0 + mkdir userdata/foo + echo bar > userdata/foo/value + mkdir userdata/qux + +The `qux` key is omitted since it has no value:: + + echo "This is a message" > /dev/kmsg + 12,607,22085407756,-;This is a message + foo=3Dbar + +Delete `userdata` entries with `rmdir`:: + + rmdir /sys/kernel/config/netconsole/cmdline0/userdata/qux + +Beware of `userdata` entries with newlines since values are printed with +newlines preserved. A userdatum value with a newline could cause the +netconsole message receiver to interpret a value as a new userdata key:: + + cat userdata/foo/value + bar + bar2 + +The `qux` key is omitted since it has no value:: + + echo "This is a message" > /dev/kmsg + 12,607,22085407756,-;This is a message + foo=3Dbar + bar2 + Extended console: =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =20 --=20 2.43.0 From nobody Wed Dec 24 18:01:53 2025 Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 71F9C12AAD1; Wed, 24 Jan 2024 17:47:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.177 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706118446; cv=none; b=GwTRPNZzsVKzsUNgoPuu5XqQ6DTWiJfd4en4WALjWxdQoF/q0yPmocuCGh0J/0iAB8UVOJ8sE1vad8TELh1/GemSr7GBOOyMi+4GQOeIRxC/JwJA1XeRorJYYWRPHfNMgmsbOShLzANoHY3XZTcAWxge9iBeiiw1BBk5KCuaqUo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706118446; c=relaxed/simple; bh=2I9FInpu6eGl5WtGuSDGdlpAR1jOX87kmU3mmBWwMLE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UhGVuV9+WDNKf3tX4U6ErvuHbJyvSE3gOBpsxuYm4S5x83phqwQxjKMn6i4Ijrf2ioimBOfdg8waEaxqy3wMYIIccKfhvBUwFzTbY6sdAUuP0zuvPqdPhjQwD6ZzdMkJz+imqJDRA5HRvxim8geNVU8QjW54MeQKMkiTKy4Qzeg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=RTuPydUP; arc=none smtp.client-ip=209.85.214.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="RTuPydUP" Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-1d50d0c98c3so54440265ad.1; Wed, 24 Jan 2024 09:47:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706118444; x=1706723244; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=02lzNgrCZ4Zdl0iLJ+8uXtX3qU8dkCCyd8xmzVFkf/8=; b=RTuPydUPx1b0DZhWnK+YSszw1oEPzH+UaFz5L07uvtoePGXqfY/xB4J5E1F9Pp6dfq LGvVir682EILyiHQ+dNrByMtS2ooKlD+Zvhi/rPdj1Cae6JDsM9LaXDSJBnmyryhfPMc qDDUgVgYw+d5OUS+8HS9h17TwPJGojia2rbAsOD3ZmjAm9GD9n7YED6dgm84ZZydzJnZ ITd3Pu5LizRPnj+aTWb/btle5kNhb1IJa9yS1GG8aE6xeqJiW2FalSICv8BCp5unLoz2 Utel3EUi3vjkp03VaxvuzbQAsJTb3qCY1+ueZwdlpoyPRyJ8NGkDrdFXOBSHv22z19WL vZGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706118444; x=1706723244; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=02lzNgrCZ4Zdl0iLJ+8uXtX3qU8dkCCyd8xmzVFkf/8=; b=O/jMB/HxD5bdRWAXEodHoT7lStIiou5qmiA7dhCgPyTFFr3ufusHeVUinfck2/Qp4U RRRh22Tj6lxLEGNUPup2G6nzZCOQDsNj53C/gIHY/zMq+TtFRwiFttB9oapOPy8wnTX6 iYf8o1wjvKtNMiJEIX1cIN76mOztSaAs3D+l1tvzrJXnv7QbekyFWTvULTPHnZUy7fMC VF2A9yfrbI2DIZ+9OnrAAuaIi5QTedLHUcusyCqslYH55h/GZs4TkdpTtFq+O9LNdOVs avQGdWtPSev5EZqI4UhwH8rJpG8lR0IesLf/wTRyGL7f0B/uwo3Mrb2prVa85RxN3UJp k2tQ== X-Gm-Message-State: AOJu0YxxeXcQWM77vwm+YYKloKKX7NRX8evn4ZBifbA5QD1zkc3uBQlz tHobug7ZrgutcIfM9OAhGw5xUaGF6Mu9EttqqJWJqpXazW9ngLBI X-Google-Smtp-Source: AGHT+IFh8roYQbN7BChoWoZRhmYZzCT8ZIbRqxs51quBI7/gZ0c8Elome2paEGINi0rmfsVzLuplbw== X-Received: by 2002:a17:90a:e544:b0:28e:8c05:979 with SMTP id ei4-20020a17090ae54400b0028e8c050979mr2079001pjb.45.1706118443758; Wed, 24 Jan 2024 09:47:23 -0800 (PST) Received: from localhost ([2601:644:9380:8cd0::7fb4]) by smtp.gmail.com with ESMTPSA id eu7-20020a17090af94700b002902076c395sm13730177pjb.34.2024.01.24.09.47.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jan 2024 09:47:23 -0800 (PST) From: Matthew Wood To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: leitao@debian.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v1 5/8] net: netconsole: add a userdata config_group member to netconsole_target Date: Wed, 24 Jan 2024 09:47:03 -0800 Message-ID: <20240124174711.1906102-6-thepacketgeek@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240124174711.1906102-1-thepacketgeek@gmail.com> References: <20240124174711.1906102-1-thepacketgeek@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Create configfs machinery for netconsole userdata appending, which depends on CONFIG_NETCONSOLE_DYNAMIC (for configfs interface). Add a userdata config_group to netconsole_target for managing userdata entries as a tree under the netconsole configfs subsystem. Directory names created under the userdata directory become userdatum keys; the userdatum value is the content of the value file. Include the minimum-viable-changes for userdata configfs config_group. init_target_config_group() ties in the complete configfs machinery to avoid unused func/variable errors during build. Initializing the netconsole_target->group is moved to init_target_config_group, which will also init and add the userdata config_group. Each userdatum entry has a limit of 256 bytes (54 for the key/directory, 200 for the value, and 2 for '=3D' and '\n' characters), which is enforced by the configfs functions for updating the userdata config_group. When a new netconsole_target is created, initialize the userdata config_group and add it as a default group for netconsole_target config_group, allowing the userdata configfs sub-tree to be presented in the netconsole configfs tree under the userdata directory. Co-developed-by: Breno Leitao Signed-off-by: Breno Leitao Signed-off-by: Matthew Wood --- drivers/net/netconsole.c | 142 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 138 insertions(+), 4 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 586945e62210..26a3bb070ad0 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -43,6 +43,10 @@ MODULE_DESCRIPTION("Console driver for network interface= s"); MODULE_LICENSE("GPL"); =20 #define MAX_PARAM_LENGTH 256 +#define MAX_USERDATA_NAME_LENGTH 54 +#define MAX_USERDATA_VALUE_LENGTH 200 +#define MAX_USERDATA_ENTRY_LENGTH 256 +#define MAX_USERDATA_ITEMS 16 #define MAX_PRINT_CHUNK 1000 =20 static char config[MAX_PARAM_LENGTH]; @@ -103,6 +107,7 @@ struct netconsole_target { struct list_head list; #ifdef CONFIG_NETCONSOLE_DYNAMIC struct config_group group; + struct config_group userdata_group; #endif bool enabled; bool extended; @@ -215,6 +220,10 @@ static struct netconsole_target *alloc_and_init(void) * | remote_ip * | local_mac * | remote_mac + * | userdata/ + * | / + * | value + * | ... * | * /... */ @@ -596,6 +605,123 @@ static ssize_t remote_mac_store(struct config_item *i= tem, const char *buf, return -EINVAL; } =20 +struct userdatum { + struct config_item item; + char value[MAX_USERDATA_VALUE_LENGTH]; +}; + +static inline struct userdatum *to_userdatum(struct config_item *item) +{ + return container_of(item, struct userdatum, item); +} + +struct userdata { + struct config_group group; +}; + +static inline struct userdata *to_userdata(struct config_item *item) +{ + return container_of(to_config_group(item), struct userdata, group); +} + +static struct netconsole_target *userdata_to_target(struct userdata *ud) +{ + struct config_group *netconsole_group; + + netconsole_group =3D to_config_group(ud->group.cg_item.ci_parent); + return to_target(&netconsole_group->cg_item); +} + +static ssize_t userdatum_value_show(struct config_item *item, char *buf) +{ + return sysfs_emit(buf, "%s\n", &(to_userdatum(item)->value[0])); +} + +static ssize_t userdatum_value_store(struct config_item *item, const char = *buf, + size_t count) +{ + struct userdatum *udm =3D to_userdatum(item); + int ret; + + if (count > MAX_USERDATA_VALUE_LENGTH) + return -EMSGSIZE; + + mutex_lock(&dynamic_netconsole_mutex); + + ret =3D strscpy(udm->value, buf, sizeof(udm->value)); + if (ret < 0) + goto out_unlock; + trim_newline(udm->value, sizeof(udm->value)); + + mutex_unlock(&dynamic_netconsole_mutex); + return count; +out_unlock: + mutex_unlock(&dynamic_netconsole_mutex); + return ret; +} + +CONFIGFS_ATTR(userdatum_, value); + +static struct configfs_attribute *userdatum_attrs[] =3D { + &userdatum_attr_value, + NULL, +}; + +static void userdatum_release(struct config_item *item) +{ + kfree(to_userdatum(item)); +} + +static struct configfs_item_operations userdatum_ops =3D { + .release =3D userdatum_release, +}; + +static const struct config_item_type userdatum_type =3D { + .ct_item_ops =3D &userdatum_ops, + .ct_attrs =3D userdatum_attrs, + .ct_owner =3D THIS_MODULE, +}; + +static struct config_item *userdatum_make_item(struct config_group *group, + const char *name) +{ + struct netconsole_target *nt; + struct userdatum *udm; + struct userdata *ud; + size_t child_count; + + if (strlen(name) > MAX_USERDATA_NAME_LENGTH) + return ERR_PTR(-ENAMETOOLONG); + + ud =3D to_userdata(&group->cg_item); + nt =3D userdata_to_target(ud); + child_count =3D list_count_nodes(&nt->userdata_group.cg_children); + if (child_count >=3D MAX_USERDATA_ITEMS) + return ERR_PTR(-ENOSPC); + + udm =3D kzalloc(sizeof(*udm), GFP_KERNEL); + if (!udm) + return ERR_PTR(-ENOMEM); + + config_item_init_type_name(&udm->item, name, &userdatum_type); + return &udm->item; +} + +static struct configfs_attribute *userdata_attrs[] =3D { + NULL, +}; + +static struct configfs_group_operations userdata_ops =3D { + .make_item =3D userdatum_make_item, +}; + +static struct config_item_type userdata_type =3D { + .ct_item_ops =3D &userdatum_ops, + .ct_group_ops =3D &userdata_ops, + .ct_attrs =3D userdata_attrs, + .ct_owner =3D THIS_MODULE, +}; + CONFIGFS_ATTR(, enabled); CONFIGFS_ATTR(, extended); CONFIGFS_ATTR(, dev_name); @@ -640,6 +766,14 @@ static const struct config_item_type netconsole_target= _type =3D { .ct_owner =3D THIS_MODULE, }; =20 +static void init_target_config_group(struct netconsole_target *nt, const c= har *name) +{ + config_group_init_type_name(&nt->group, name, &netconsole_target_type); + config_group_init_type_name(&nt->userdata_group, "userdata", + &userdata_type); + configfs_add_default_group(&nt->userdata_group, &nt->group); +} + static struct netconsole_target *find_cmdline_target(const char *name) { struct netconsole_target *nt, *ret =3D NULL; @@ -675,6 +809,7 @@ static struct config_group *make_netconsole_target(stru= ct config_group *group, strlen(NETCONSOLE_PARAM_TARGET_PREFIX))) { nt =3D find_cmdline_target(name); if (nt) { + init_target_config_group(nt, name); return &nt->group; } } @@ -683,8 +818,8 @@ static struct config_group *make_netconsole_target(stru= ct config_group *group, if (!nt) return ERR_PTR(-ENOMEM); =20 - /* Initialize the config_item member */ - config_group_init_type_name(&nt->group, name, &netconsole_target_type); + /* Initialize the config_group member */ + init_target_config_group(nt, name); =20 /* Adding, but it is disabled */ spin_lock_irqsave(&target_list_lock, flags); @@ -741,8 +876,7 @@ static void populate_configfs_item(struct netconsole_ta= rget *nt, =20 snprintf(target_name, sizeof(target_name), "%s%d", NETCONSOLE_PARAM_TARGET_PREFIX, cmdline_count); - config_group_init_type_name(&nt->group, target_name, - &netconsole_target_type); + init_target_config_group(nt, target_name); } =20 #endif /* CONFIG_NETCONSOLE_DYNAMIC */ --=20 2.43.0 From nobody Wed Dec 24 18:01:53 2025 Received: from mail-pg1-f179.google.com (mail-pg1-f179.google.com [209.85.215.179]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7F48E12BE82; Wed, 24 Jan 2024 17:47:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.179 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706118448; cv=none; b=VB/Rm0scIPpH/xV1vFVUUYyfiGUHcbzR5R0mv7e+sY7lYHgwXxBkTuIUO3AiqV0T0AWVBWJFT6riLB+xwvStfyX3UfCk8XovKkaD9KZvz1b/zEFgwQch5RnKYRBXOJPz2MziQ4ASAvnjmhwV8quKxZvCAzGzFYl3VZQwljfqwoM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706118448; c=relaxed/simple; bh=Jjv/TuEFrl542Uz2oPY2+FJwkmzA1uzPImxNDC4FnrI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Gz9DcnNP9cuXwMqSVvqqPzaoLaV6BvUxiSL5YTRurTuv8FFUVCmHdD8o57jIyWe/snMelhq8jBg8Hu9LFQc7VbP0SsYwYFdVz7KYC8BrTp1lLSbACJrpNBXPF2iw8YsixVDxIW/vMyEiA+MKasS3kwyN/g2lM0sXpiyh534tWuU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Gh+1Hasm; arc=none smtp.client-ip=209.85.215.179 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Gh+1Hasm" Received: by mail-pg1-f179.google.com with SMTP id 41be03b00d2f7-53fbf2c42bfso4095691a12.3; Wed, 24 Jan 2024 09:47:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706118446; x=1706723246; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=6yr4N28qTdreJQILPMIL8Vba8ZMs6hXrf/fYG9mRvfk=; b=Gh+1HasmqJacU8EJ00LtEwisiIY1EPc/ZxwqM8qR0eGv2aA3q/ku9pcJst0AZzD4vE IuPXK0+3jGTqx3WIiKW4kCT3gkOdAQxloCJmu9wUwnZrWLeok9h4L+FdNAH65j84G65n csHe/5O7K+/95RtY07Phff24ChEkqjT5OYLLArnY2nf+JKPpv4uvE/n7q3ZVx6LzLgm3 S/Sfy2zNhMKu+7FQF2531l2LopBtHXvTfgrHIiMGSqfEdG7idNfbLsCku2+RwuasmBFl WG1VOMg56YoWJZ/CqPAYnQDu9m4S7CfO2ZpxDShS8PJsj5UJjbP8xis+/zg3eJA95QUB Ysqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706118446; x=1706723246; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6yr4N28qTdreJQILPMIL8Vba8ZMs6hXrf/fYG9mRvfk=; b=nfBXPCLaqmneyC2b3+VgapczHM46rM6fLsB2bzaFWMy51nGnpngGPNo94GK96EHYhK kZJFQM/u/KT2F6V/WWKefNhi+CBaZcjqD5g0w8iTiXYBHvoNiNUDEew49fBtL4+V4Oc2 KRe2jjHT55pVXQmfcLCtjT9eZywPGlDn/SfyOMn/k7GdxpqGsFlJB70zdfXLGcV6Fb61 FXeRoBJoStrn/om6ShT0+2VA1P359vs8/gYGW+1g9AFWYDZa29RS20BQy5sWgc9PXGqo krxMWfqNA2ptGVAM0OIYY9JvonLx2ae0la6YEYlNus4rhiQ2BoORULcsmGfge+XWNVNi lggA== X-Gm-Message-State: AOJu0Ywe5m/wYoIfjB0TsZkqwSSFbN7iTRtGeVPGjX/6n63cMEcTxsND rU5HNsEaUcAm+q0GCMPzejFzL4Lz4wtKbZv+7bNzLFmhw6C0qlbU X-Google-Smtp-Source: AGHT+IFcM1ZqAfg+43OOysJA4KTHZItl2rd9oGtRVwM/1yHN/6BBFXY8dfTg7i7fxN8aMzUgdLAb/Q== X-Received: by 2002:a05:6a20:671c:b0:199:a725:9b59 with SMTP id q28-20020a056a20671c00b00199a7259b59mr1075725pzh.114.1706118445804; Wed, 24 Jan 2024 09:47:25 -0800 (PST) Received: from localhost ([2601:644:9380:8cd0::7fb4]) by smtp.gmail.com with ESMTPSA id ey15-20020a056a0038cf00b006db05eb1301sm14174896pfb.21.2024.01.24.09.47.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jan 2024 09:47:25 -0800 (PST) From: Matthew Wood To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: leitao@debian.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v1 6/8] net: netconsole: cache userdata formatted string in netconsole_target Date: Wed, 24 Jan 2024 09:47:04 -0800 Message-ID: <20240124174711.1906102-7-thepacketgeek@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240124174711.1906102-1-thepacketgeek@gmail.com> References: <20240124174711.1906102-1-thepacketgeek@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Store a formatted string for userdata that will be appended to netconsole messages. The string has a capacity of 4KB, as calculated by the userdatum entry length of 256 bytes and a max of 16 userdata entries. Update the stored netconsole_target->userdata_complete string with the new formatted userdata values when a userdatum is created, edited, or removed. Each userdata entry contains a trailing newline, which will be formatted as such in netconsole messages:: 6.7.0-rc8-virtme,12,500,1646292204,-;test release=3Dfoo something=3Dbar 6.7.0-rc8-virtme,12,500,1646292204,-;another test release=3Dfoo something=3Dbar Enforcement of MAX_USERDATA_ITEMS is done in userdatum_make_item; update_userdata will not check for this case but will skip any userdata children over the limit of MAX_USERDATA_ITEMs. If a userdata entry/dir is created but no value is provided, that entry will be skipped. This is in part because update_userdata() can't be called in userdatum_make_item() since the item will not have been added to the userdata config_group children yet. To preserve the experience of adding an empty userdata that doesn't show up in the netconsole messages, purposefully skip emtpy userdata items even when update_userdata() can be called. Co-developed-by: Breno Leitao Signed-off-by: Breno Leitao Signed-off-by: Matthew Wood --- drivers/net/netconsole.c | 61 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 26a3bb070ad0..7de693d0773f 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -108,6 +108,8 @@ struct netconsole_target { #ifdef CONFIG_NETCONSOLE_DYNAMIC struct config_group group; struct config_group userdata_group; + char userdata_complete[MAX_USERDATA_ENTRY_LENGTH * MAX_USERDATA_ITEMS]; + size_t userdata_length; #endif bool enabled; bool extended; @@ -637,10 +639,50 @@ static ssize_t userdatum_value_show(struct config_ite= m *item, char *buf) return sysfs_emit(buf, "%s\n", &(to_userdatum(item)->value[0])); } =20 +static void update_userdata(struct netconsole_target *nt) +{ + int complete_idx =3D 0, child_count =3D 0; + struct list_head *entry; + struct userdata *ud; + + /* Clear the current string in case the last userdatum was deleted */ + nt->userdata_length =3D 0; + nt->userdata_complete[0] =3D 0; + + ud =3D to_userdata(&nt->userdata_group.cg_item); + list_for_each(entry, &nt->userdata_group.cg_children) { + struct userdatum *udm_item; + struct config_item *item; + + if (child_count >=3D MAX_USERDATA_ITEMS) + break; + child_count++; + + item =3D container_of(entry, struct config_item, ci_entry); + udm_item =3D to_userdatum(item); + + /* Skip userdata with no value set */ + if (strnlen(udm_item->value, MAX_USERDATA_VALUE_LENGTH) =3D=3D 0) + continue; + + /* This doesn't overflow userdata_complete since it will write + * one entry length (1/MAX_USERDATA_ITEMS long), entry count is + * checked to not exceed MAX items with child_count above + */ + complete_idx +=3D scnprintf(&nt->userdata_complete[complete_idx], + MAX_USERDATA_ENTRY_LENGTH, "%s=3D%s\n", + item->ci_name, udm_item->value); + } + nt->userdata_length =3D strnlen(nt->userdata_complete, + sizeof(nt->userdata_complete)); +} + static ssize_t userdatum_value_store(struct config_item *item, const char = *buf, size_t count) { struct userdatum *udm =3D to_userdatum(item); + struct netconsole_target *nt; + struct userdata *ud; int ret; =20 if (count > MAX_USERDATA_VALUE_LENGTH) @@ -653,6 +695,10 @@ static ssize_t userdatum_value_store(struct config_ite= m *item, const char *buf, goto out_unlock; trim_newline(udm->value, sizeof(udm->value)); =20 + ud =3D to_userdata(item->ci_parent); + nt =3D userdata_to_target(ud); + update_userdata(nt); + mutex_unlock(&dynamic_netconsole_mutex); return count; out_unlock: @@ -707,12 +753,27 @@ static struct config_item *userdatum_make_item(struct= config_group *group, return &udm->item; } =20 +static void userdatum_drop(struct config_group *group, struct config_item = *item) +{ + struct netconsole_target *nt; + struct userdata *ud; + + ud =3D to_userdata(&group->cg_item); + nt =3D userdata_to_target(ud); + + mutex_lock(&dynamic_netconsole_mutex); + update_userdata(nt); + config_item_put(item); + mutex_unlock(&dynamic_netconsole_mutex); +} + static struct configfs_attribute *userdata_attrs[] =3D { NULL, }; =20 static struct configfs_group_operations userdata_ops =3D { .make_item =3D userdatum_make_item, + .drop_item =3D userdatum_drop, }; =20 static struct config_item_type userdata_type =3D { --=20 2.43.0 From nobody Wed Dec 24 18:01:53 2025 Received: from mail-oo1-f45.google.com (mail-oo1-f45.google.com [209.85.161.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 861DC12BF1C; Wed, 24 Jan 2024 17:47:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706118451; cv=none; b=eTWWb/w1oD8WTxZPvt0L14wgMVGjvPcll3zaNugRzHWmW8ZOd3Nc0+IArcJHCp/Mk69aeEnq/5qWTO7985oT00mW/itIlPLrAvDpvm61Nb/V1iEf2NEw05o0YHIfUuXyfECE0m3/ivveRGg+YM+Ffw1O8byOC/1VdpfL/jATZyw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706118451; c=relaxed/simple; bh=lbjcvJlqREfcesgrRYGDA24BL5PppwaqOFgHWCceX3A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=r6nee3ySPvwEu4+JdqdyqpE10vqbGsemuoWeoTTm1dTJ429DocqsBdepyG623hSgXGVR3/yk9PVqWy2vW1EYqCLXzDScFrzFUX4w13VUCG6xwBMSeOoGhEVizHNwuIFtGpAckLk+PGSg0KnHPngDcUVWBErajGm8jISpbZhTM6k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=HFLgSbjF; arc=none smtp.client-ip=209.85.161.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="HFLgSbjF" Received: by mail-oo1-f45.google.com with SMTP id 006d021491bc7-59612e4a21eso2317880eaf.3; Wed, 24 Jan 2024 09:47:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706118448; x=1706723248; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=DjKj9EzdAuWyK4cN+spXyTYM3d7/eJ9KCYgY9YiMv00=; b=HFLgSbjFUqCtWfBfxpQzrrPVNmc6+r3ZgTrqiPk3+dHQkdx23Y6HL8COkFD8o5aL+0 iUwkU35UjiWCkRn+vHwgFBy6SVyhwmgQsxAziHNSyqrVSREoiutdzlBjkE+fod87woNM 7d2XxwOLuuNzgjZHy1045m2gDsTn50jTa+Yhz/cWNt3c1rrqS/yv5AQkV6acqVyMXMXZ FN9tqY+RWs7fHuutgbNgpIOKXjb2zQjGGup9fUyEJbWg7hFSgUaDYIoUUIhVobukabze yO8gJ9O5xerPPzkXRCN+FKt5m34vdosCkXbDcS+cbTI39UCbZM30/Tz860n2R/kraPQj aSKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706118448; x=1706723248; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DjKj9EzdAuWyK4cN+spXyTYM3d7/eJ9KCYgY9YiMv00=; b=Km+3oBXCDF8+H5qTUvFOE+3BffV/hZUoo6oLXUegdU18x8YT7QjkH2GLAdwEJcrLbU ybHNdqPmgyfXCq4qEiMgzzJoVi1FsocW8rjZ8N8lvwWDM6NUQ2OH8PRuZ/MQAz9yMcfD ne+ESvZbJg27ofVdOC9fYqFvab4OlHajmt3n+P1MNqzgM5BZGkPLRT2z2ffkfirgM3ZJ PS2c2hMZsBk374NXFOE0PI1NnYqqq6Egu+u6JZD6uIPw0zAUkDW3QkaeI5a9GDVxde7A mmSh/MC+yWEkWOcTWzM+i1kLBmvA80rhLBsqFiHjmbOqYJxqOjtgaPJPU76OgFEK3Caf ynuA== X-Gm-Message-State: AOJu0YzDSpgKXGu5tOfm5QKEirc2qOFvWAl3BsNzvkI3B03uP19L12y0 5FOlDGc3KwPQxMeZOSk2EpA5jcX1zLKG7ieLycjnym75QR4vWeVa X-Google-Smtp-Source: AGHT+IGkRC5yDjunMYDK5Hc1NLJvSXtwh/QkmR8qEyZ6fdiMMd6Y9AgVt8qJiEKKYW3B41dQAlKX2Q== X-Received: by 2002:a05:6358:ee46:b0:176:277d:3487 with SMTP id ik6-20020a056358ee4600b00176277d3487mr3703332rwb.24.1706118448348; Wed, 24 Jan 2024 09:47:28 -0800 (PST) Received: from localhost ([2601:644:9380:8cd0::7fb4]) by smtp.gmail.com with ESMTPSA id z17-20020a63c051000000b005cfbe445a85sm8446564pgi.70.2024.01.24.09.47.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jan 2024 09:47:28 -0800 (PST) From: Matthew Wood To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: leitao@debian.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v1 7/8] net: netconsole: append userdata to netconsole messages Date: Wed, 24 Jan 2024 09:47:05 -0800 Message-ID: <20240124174711.1906102-8-thepacketgeek@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240124174711.1906102-1-thepacketgeek@gmail.com> References: <20240124174711.1906102-1-thepacketgeek@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Append userdata to outgoing unfragmented (<1000 bytes) netconsole messages. When sending messages the userdata string is already formatted and stored in netconsole_target->userdata_complete. Always write the outgoing message to buf, so userdata can be appended in a standard fashion. This is a change from only using buf when the release needs to be prepended to the message. Co-developed-by: Breno Leitao Signed-off-by: Breno Leitao Signed-off-by: Matthew Wood --- drivers/net/netconsole.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 7de693d0773f..8df3932ef4fc 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -1032,19 +1032,34 @@ static void send_ext_msg_udp(struct netconsole_targ= et *nt, const char *msg, const char *msg_ready =3D msg; const char *release; int release_len =3D 0; + int userdata_len =3D 0; + char *userdata =3D NULL; + +#ifdef CONFIG_NETCONSOLE_DYNAMIC + userdata =3D nt->userdata_complete; + userdata_len =3D nt->userdata_length; +#endif =20 if (nt->release) { release =3D init_utsname()->release; release_len =3D strlen(release) + 1; } =20 - if (msg_len + release_len <=3D MAX_PRINT_CHUNK) { + if (msg_len + release_len + userdata_len <=3D MAX_PRINT_CHUNK) { /* No fragmentation needed */ if (nt->release) { scnprintf(buf, MAX_PRINT_CHUNK, "%s,%s", release, msg); msg_len +=3D release_len; - msg_ready =3D buf; + } else { + memcpy(buf, msg, msg_len); } + + if (userdata) + msg_len +=3D scnprintf(&buf[msg_len], + MAX_PRINT_CHUNK - msg_len, + "%s", userdata); + + msg_ready =3D buf; netpoll_send_udp(&nt->np, msg_ready, msg_len); return; } --=20 2.43.0 From nobody Wed Dec 24 18:01:53 2025 Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 380C412C523; Wed, 24 Jan 2024 17:47:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706118452; cv=none; b=JuSQwneRS3h0H3IwhMHSL7LdFARrraz3JvqrWpE8OIvtADXHc+m4IMABMptFLjS4ETvTSlC+p9Isra66YQ2LbrgHqR8C3cS6ZSefJaktCJ88vW84e5x2YFny6tiyei2YCiSVLTpwrwM2Owj4+w0fkzdHCsBXMopEBHVu69thWbM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1706118452; c=relaxed/simple; bh=1guLW5LaVQcL2JOWOYaToB2yKWIxIxlvgTjPbw8dAoQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=l/5QJEnW3RcWOcX/9ssbgUTarolyKCz9jr3tTm5tQVe5n7wwakvPCaPsLwe/d8g4M2ZtB0BCbP6LK9eKI5AB3Z6lYQ7LVOgY8caaylT1WLLcrCHCYxgd7zeMGkabAVK20Ikw0X8UjI/+j3EW/o2diz6oAhtRZuJYP2TVd0+a6Vw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=PhiUpWfX; arc=none smtp.client-ip=209.85.214.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="PhiUpWfX" Received: by mail-pl1-f182.google.com with SMTP id d9443c01a7336-1d7431e702dso27044695ad.1; Wed, 24 Jan 2024 09:47:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1706118450; x=1706723250; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Vzf+RsvLyT/r4LQQ0hA+PIZWqxzvX6yBhcSuFj8O/bI=; b=PhiUpWfXkft2sJMCaID8IER2iup0P4tfa1wGwH9G/gB5NSI//l2HavJjHduKx4qKb2 ARVAlIJnEswJ64KszivPJfIrE8N/hl6ZPGeCpZbDbqHP0LZ2KhwlbfAG07vxYxq35j+k GaJh0f5J6JE1oL7wcyFeWo12FuvGR5yV5avKVlhnh1nuE7OI5cVMhZ6AnQa3NXtajL6k XfS/iiPQUNTRhbgbMUEYpW7Cz3EcXjmHXUjL0NySijSasr61Px6mAuo0+V/Fcq3C6r1j ysM4MqxXiLTS2buKiZcEGqhSwH4tMdGhWeyevn6lgfa08VkrXwXhEwTkilBkRROCiUJO e5ow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1706118450; x=1706723250; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Vzf+RsvLyT/r4LQQ0hA+PIZWqxzvX6yBhcSuFj8O/bI=; b=k+LZb48NmmkyDNFuH05qGLfINODw8VyysAVvJ454d2siK/zftA8oVcgUHA8rwLo5P0 s1+41CIr/ctl8EYrryJdLhC/xBgBzZdnirnLVnr3yG+HfSvE5t/5ZkP9dhRDMOXREB7p 4Zm93ZkPDSfygES01aOSwI3AbrXoHPqsyY1KXAkME/7niS7jujqP6aCgkvzrX3uA9cjc /aPAzCtJZl3ZRZTMCDcHzGw/ZIufL0ZqG24EARC8esaaAL4C4SEpZ6IMLCeYZ9LXEG+w FqmUF8w6eaNBs1/9UqzmV2cVgZSR9YADShzVvuOSYAo/VbAKN00FR2PoQ6hNn8n3BkPp UREg== X-Gm-Message-State: AOJu0YzJ87Zlr8pvpwgevNr0DpBhwNr88/zqbShGfEZAaOvPsI2xXZam gq8W/ajVGNB7tgWZ4MEfKf9JRvTpVoolmtAi0ccl84uOCpghHXKM X-Google-Smtp-Source: AGHT+IG3PMisEeC2I4aZUGDTWqSd6n3BuwHOurjfi3k3HVXYBJlQlwiSRrlO+0qbakWfO37bjEQHww== X-Received: by 2002:a17:902:cec2:b0:1d7:72b9:b114 with SMTP id d2-20020a170902cec200b001d772b9b114mr1268561plg.60.1706118450630; Wed, 24 Jan 2024 09:47:30 -0800 (PST) Received: from localhost ([2601:644:9380:8cd0::7fb4]) by smtp.gmail.com with ESMTPSA id d5-20020a170902b70500b001d74c285b55sm5565938pls.67.2024.01.24.09.47.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jan 2024 09:47:30 -0800 (PST) From: Matthew Wood To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: leitao@debian.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v1 8/8] net: netconsole: append userdata to fragmented netconsole messages Date: Wed, 24 Jan 2024 09:47:06 -0800 Message-ID: <20240124174711.1906102-9-thepacketgeek@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240124174711.1906102-1-thepacketgeek@gmail.com> References: <20240124174711.1906102-1-thepacketgeek@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Regardless of whether the original message body or formatted userdata exceeds the MAX_PRINT_CHUNK, append userdata to the netconsole message starting with the first chunk that has available space after writing the body. Co-developed-by: Breno Leitao Signed-off-by: Breno Leitao Signed-off-by: Matthew Wood --- drivers/net/netconsole.c | 50 +++++++++++++++++++++++++++++----------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c index 8df3932ef4fc..95e563e474af 100644 --- a/drivers/net/netconsole.c +++ b/drivers/net/netconsole.c @@ -1083,24 +1083,48 @@ static void send_ext_msg_udp(struct netconsole_targ= et *nt, const char *msg, memcpy(buf + release_len, header, header_len); header_len +=3D release_len; =20 - while (offset < body_len) { + while (offset < body_len + userdata_len) { int this_header =3D header_len; - int this_chunk; + int this_offset =3D 0; + int this_chunk =3D 0; =20 this_header +=3D scnprintf(buf + this_header, sizeof(buf) - this_header, - ",ncfrag=3D%d/%d;", offset, body_len); - - this_chunk =3D min(body_len - offset, - MAX_PRINT_CHUNK - this_header); - if (WARN_ON_ONCE(this_chunk <=3D 0)) - return; - - memcpy(buf + this_header, body + offset, this_chunk); - - netpoll_send_udp(&nt->np, buf, this_header + this_chunk); + ",ncfrag=3D%d/%d;", offset, + body_len + userdata_len); + + /* Not all body data has been written yet */ + if (offset < body_len) { + this_chunk =3D min(body_len - offset, + MAX_PRINT_CHUNK - this_header); + if (WARN_ON_ONCE(this_chunk <=3D 0)) + return; + memcpy(buf + this_header, body + offset, this_chunk); + this_offset +=3D this_chunk; + } + /* Body is fully written and there is pending userdata to write, + * append userdata in this chunk + */ + if (offset + this_offset >=3D body_len && + offset + this_offset < userdata_len + body_len) { + int sent_userdata =3D (offset + this_offset) - body_len; + int preceding_bytes =3D this_chunk + this_header; + + if (WARN_ON_ONCE(sent_userdata < 0)) + return; + + this_chunk =3D min(userdata_len - sent_userdata, + MAX_PRINT_CHUNK - preceding_bytes); + if (WARN_ON_ONCE(this_chunk <=3D 0)) + return; + memcpy(buf + this_header + this_offset, + userdata + sent_userdata, + this_chunk); + this_offset +=3D this_chunk; + } =20 - offset +=3D this_chunk; + netpoll_send_udp(&nt->np, buf, this_header + this_offset); + offset +=3D this_offset; } } =20 --=20 2.43.0