kobject: fix suppressing modalias in uevents delivered over netlink
The commit4a336a23d6
("kobject: copy env blob in one go") optimized constructing uevent data for delivery over netlink by using the raw environment buffer, instead of reconstructing it from individual environment pointers. Unfortunately in doing so it broke suppressing MODALIAS attribute for KOBJ_UNBIND events, as the code that suppressed this attribute only adjusted the environment pointers, but left the buffer itself alone. Let's fix it by making sure the offending attribute is obliterated form the buffer as well. Reported-by: Tariq Toukan <tariqt@mellanox.com> Reported-by: Casey Leedom <leedom@chelsio.com> Fixes:4a336a23d6
("kobject: copy env blob in one go") Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
f57ab9a01a
commit
9b3fa47d4a
@ -346,7 +346,8 @@ static int kobject_uevent_net_broadcast(struct kobject *kobj,
|
||||
static void zap_modalias_env(struct kobj_uevent_env *env)
|
||||
{
|
||||
static const char modalias_prefix[] = "MODALIAS=";
|
||||
int i;
|
||||
size_t len;
|
||||
int i, j;
|
||||
|
||||
for (i = 0; i < env->envp_idx;) {
|
||||
if (strncmp(env->envp[i], modalias_prefix,
|
||||
@ -355,11 +356,18 @@ static void zap_modalias_env(struct kobj_uevent_env *env)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (i != env->envp_idx - 1)
|
||||
memmove(&env->envp[i], &env->envp[i + 1],
|
||||
sizeof(env->envp[i]) * env->envp_idx - 1);
|
||||
len = strlen(env->envp[i]) + 1;
|
||||
|
||||
if (i != env->envp_idx - 1) {
|
||||
memmove(env->envp[i], env->envp[i + 1],
|
||||
env->buflen - len);
|
||||
|
||||
for (j = i; j < env->envp_idx - 1; j++)
|
||||
env->envp[j] = env->envp[j + 1] - len;
|
||||
}
|
||||
|
||||
env->envp_idx--;
|
||||
env->buflen -= len;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user