mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 00:51:51 -04:00
Merge branch 'netconsole-configfs-store-callback-fixes'
Breno Leitao says: ==================== netconsole: configfs store callback fixes There are still some changes I want to make, such as, having the dynamic lock when reading from configfs (_show() callbacks), wich will solve other issues, but I will keep it for later. ==================== Link: https://patch.msgid.link/20260427-netconsole_ai_fixes-v2-0-59965f29d9cc@debian.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -752,7 +752,7 @@ static ssize_t enabled_store(struct config_item *item,
|
||||
unregister_netcons_consoles();
|
||||
}
|
||||
|
||||
ret = strnlen(buf, count);
|
||||
ret = count;
|
||||
/* Deferred cleanup */
|
||||
netconsole_process_cleanups();
|
||||
out_unlock:
|
||||
@@ -781,7 +781,7 @@ static ssize_t release_store(struct config_item *item, const char *buf,
|
||||
|
||||
nt->release = release;
|
||||
|
||||
ret = strnlen(buf, count);
|
||||
ret = count;
|
||||
out_unlock:
|
||||
dynamic_netconsole_mutex_unlock();
|
||||
return ret;
|
||||
@@ -807,7 +807,7 @@ static ssize_t extended_store(struct config_item *item, const char *buf,
|
||||
goto out_unlock;
|
||||
|
||||
nt->extended = extended;
|
||||
ret = strnlen(buf, count);
|
||||
ret = count;
|
||||
out_unlock:
|
||||
dynamic_netconsole_mutex_unlock();
|
||||
return ret;
|
||||
@@ -817,6 +817,13 @@ static ssize_t dev_name_store(struct config_item *item, const char *buf,
|
||||
size_t count)
|
||||
{
|
||||
struct netconsole_target *nt = to_target(item);
|
||||
size_t len = count;
|
||||
|
||||
/* Account for a trailing newline appended by tools like echo */
|
||||
if (len && buf[len - 1] == '\n')
|
||||
len--;
|
||||
if (len >= IFNAMSIZ)
|
||||
return -ENAMETOOLONG;
|
||||
|
||||
dynamic_netconsole_mutex_lock();
|
||||
if (nt->state == STATE_ENABLED) {
|
||||
@@ -830,7 +837,7 @@ static ssize_t dev_name_store(struct config_item *item, const char *buf,
|
||||
trim_newline(nt->np.dev_name, IFNAMSIZ);
|
||||
|
||||
dynamic_netconsole_mutex_unlock();
|
||||
return strnlen(buf, count);
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t local_port_store(struct config_item *item, const char *buf,
|
||||
@@ -849,7 +856,7 @@ static ssize_t local_port_store(struct config_item *item, const char *buf,
|
||||
ret = kstrtou16(buf, 10, &nt->np.local_port);
|
||||
if (ret < 0)
|
||||
goto out_unlock;
|
||||
ret = strnlen(buf, count);
|
||||
ret = count;
|
||||
out_unlock:
|
||||
dynamic_netconsole_mutex_unlock();
|
||||
return ret;
|
||||
@@ -871,7 +878,7 @@ static ssize_t remote_port_store(struct config_item *item,
|
||||
ret = kstrtou16(buf, 10, &nt->np.remote_port);
|
||||
if (ret < 0)
|
||||
goto out_unlock;
|
||||
ret = strnlen(buf, count);
|
||||
ret = count;
|
||||
out_unlock:
|
||||
dynamic_netconsole_mutex_unlock();
|
||||
return ret;
|
||||
@@ -896,7 +903,7 @@ static ssize_t local_ip_store(struct config_item *item, const char *buf,
|
||||
goto out_unlock;
|
||||
nt->np.ipv6 = !!ipv6;
|
||||
|
||||
ret = strnlen(buf, count);
|
||||
ret = count;
|
||||
out_unlock:
|
||||
dynamic_netconsole_mutex_unlock();
|
||||
return ret;
|
||||
@@ -921,7 +928,7 @@ static ssize_t remote_ip_store(struct config_item *item, const char *buf,
|
||||
goto out_unlock;
|
||||
nt->np.ipv6 = !!ipv6;
|
||||
|
||||
ret = strnlen(buf, count);
|
||||
ret = count;
|
||||
out_unlock:
|
||||
dynamic_netconsole_mutex_unlock();
|
||||
return ret;
|
||||
@@ -957,7 +964,7 @@ static ssize_t remote_mac_store(struct config_item *item, const char *buf,
|
||||
goto out_unlock;
|
||||
memcpy(nt->np.remote_mac, remote_mac, ETH_ALEN);
|
||||
|
||||
ret = strnlen(buf, count);
|
||||
ret = count;
|
||||
out_unlock:
|
||||
dynamic_netconsole_mutex_unlock();
|
||||
return ret;
|
||||
@@ -1072,26 +1079,30 @@ static ssize_t userdatum_value_store(struct config_item *item, const char *buf,
|
||||
size_t count)
|
||||
{
|
||||
struct userdatum *udm = to_userdatum(item);
|
||||
char old_value[MAX_EXTRADATA_VALUE_LEN];
|
||||
struct netconsole_target *nt;
|
||||
struct userdata *ud;
|
||||
ssize_t ret;
|
||||
|
||||
if (count > MAX_EXTRADATA_VALUE_LEN)
|
||||
if (count >= MAX_EXTRADATA_VALUE_LEN)
|
||||
return -EMSGSIZE;
|
||||
|
||||
mutex_lock(&netconsole_subsys.su_mutex);
|
||||
dynamic_netconsole_mutex_lock();
|
||||
|
||||
ret = strscpy(udm->value, buf, sizeof(udm->value));
|
||||
if (ret < 0)
|
||||
goto out_unlock;
|
||||
/* Snapshot for rollback if update_userdata() fails below */
|
||||
strscpy(old_value, udm->value, sizeof(old_value));
|
||||
/* count is bounded above, so strscpy() cannot truncate here */
|
||||
strscpy(udm->value, buf, sizeof(udm->value));
|
||||
trim_newline(udm->value, sizeof(udm->value));
|
||||
|
||||
ud = to_userdata(item->ci_parent);
|
||||
nt = userdata_to_target(ud);
|
||||
ret = update_userdata(nt);
|
||||
if (ret < 0)
|
||||
if (ret < 0) {
|
||||
/* Restore the previous value so it matches the live payload */
|
||||
strscpy(udm->value, old_value, sizeof(udm->value));
|
||||
goto out_unlock;
|
||||
}
|
||||
ret = count;
|
||||
out_unlock:
|
||||
dynamic_netconsole_mutex_unlock();
|
||||
@@ -1133,7 +1144,7 @@ static ssize_t sysdata_msgid_enabled_store(struct config_item *item,
|
||||
disable_sysdata_feature(nt, SYSDATA_MSGID);
|
||||
|
||||
unlock_ok:
|
||||
ret = strnlen(buf, count);
|
||||
ret = count;
|
||||
dynamic_netconsole_mutex_unlock();
|
||||
mutex_unlock(&netconsole_subsys.su_mutex);
|
||||
return ret;
|
||||
@@ -1162,7 +1173,7 @@ static ssize_t sysdata_release_enabled_store(struct config_item *item,
|
||||
disable_sysdata_feature(nt, SYSDATA_RELEASE);
|
||||
|
||||
unlock_ok:
|
||||
ret = strnlen(buf, count);
|
||||
ret = count;
|
||||
dynamic_netconsole_mutex_unlock();
|
||||
mutex_unlock(&netconsole_subsys.su_mutex);
|
||||
return ret;
|
||||
@@ -1191,7 +1202,7 @@ static ssize_t sysdata_taskname_enabled_store(struct config_item *item,
|
||||
disable_sysdata_feature(nt, SYSDATA_TASKNAME);
|
||||
|
||||
unlock_ok:
|
||||
ret = strnlen(buf, count);
|
||||
ret = count;
|
||||
dynamic_netconsole_mutex_unlock();
|
||||
mutex_unlock(&netconsole_subsys.su_mutex);
|
||||
return ret;
|
||||
@@ -1225,7 +1236,7 @@ static ssize_t sysdata_cpu_nr_enabled_store(struct config_item *item,
|
||||
disable_sysdata_feature(nt, SYSDATA_CPU_NR);
|
||||
|
||||
unlock_ok:
|
||||
ret = strnlen(buf, count);
|
||||
ret = count;
|
||||
dynamic_netconsole_mutex_unlock();
|
||||
mutex_unlock(&netconsole_subsys.su_mutex);
|
||||
return ret;
|
||||
|
||||
Reference in New Issue
Block a user