[PATCH v2 3/3] kthread: Use 'task_struct->full_name' to store kthread's full name

Bhupesh posted 3 patches 8 months, 3 weeks ago
[PATCH v2 3/3] kthread: Use 'task_struct->full_name' to store kthread's full name
Posted by Bhupesh 8 months, 3 weeks ago
Commit 6986ce24fc00 ("kthread: dynamically allocate memory to store
kthread's full name"), added 'full_name' in parallel to 'comm' for
kthread names.

Now that we have added 'full_name' added to 'task_struct' itself,
drop the additional 'full_name' entry from 'struct kthread' and also
its usage.

Signed-off-by: Bhupesh <bhupesh@igalia.com>
---
 kernel/kthread.c | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/kernel/kthread.c b/kernel/kthread.c
index 5dc5b0d7238e..46fe19b7ef76 100644
--- a/kernel/kthread.c
+++ b/kernel/kthread.c
@@ -66,8 +66,6 @@ struct kthread {
 #ifdef CONFIG_BLK_CGROUP
 	struct cgroup_subsys_state *blkcg_css;
 #endif
-	/* To store the full name if task comm is truncated. */
-	char *full_name;
 	struct task_struct *task;
 	struct list_head hotplug_node;
 	struct cpumask *preferred_affinity;
@@ -108,12 +106,12 @@ void get_kthread_comm(char *buf, size_t buf_size, struct task_struct *tsk)
 {
 	struct kthread *kthread = to_kthread(tsk);
 
-	if (!kthread || !kthread->full_name) {
+	if (!kthread || !tsk->full_name) {
 		strscpy(buf, tsk->comm, buf_size);
 		return;
 	}
 
-	strscpy_pad(buf, kthread->full_name, buf_size);
+	strscpy_pad(buf, tsk->full_name, buf_size);
 }
 
 bool set_kthread_struct(struct task_struct *p)
@@ -153,7 +151,6 @@ void free_kthread_struct(struct task_struct *k)
 	WARN_ON_ONCE(kthread->blkcg_css);
 #endif
 	k->worker_private = NULL;
-	kfree(kthread->full_name);
 	kfree(kthread);
 }
 
@@ -430,7 +427,7 @@ static int kthread(void *_create)
 		kthread_exit(-EINTR);
 	}
 
-	self->full_name = create->full_name;
+	self->task->full_name = create->full_name;
 	self->threadfn = threadfn;
 	self->data = data;
 
-- 
2.38.1
Re: [PATCH v2 3/3] kthread: Use 'task_struct->full_name' to store kthread's full name
Posted by Kees Cook 8 months, 2 weeks ago
On Mon, Mar 31, 2025 at 05:48:20PM +0530, Bhupesh wrote:
> Commit 6986ce24fc00 ("kthread: dynamically allocate memory to store
> kthread's full name"), added 'full_name' in parallel to 'comm' for
> kthread names.
> 
> Now that we have added 'full_name' added to 'task_struct' itself,
> drop the additional 'full_name' entry from 'struct kthread' and also
> its usage.
> 
> Signed-off-by: Bhupesh <bhupesh@igalia.com>

I'd like to see this patch be the first patch in the series. This show
the existing use for "full_name". (And as such it'll probably need bits
from patch 1.)

-Kees

> ---
>  kernel/kthread.c | 9 +++------
>  1 file changed, 3 insertions(+), 6 deletions(-)
> 
> diff --git a/kernel/kthread.c b/kernel/kthread.c
> index 5dc5b0d7238e..46fe19b7ef76 100644
> --- a/kernel/kthread.c
> +++ b/kernel/kthread.c
> @@ -66,8 +66,6 @@ struct kthread {
>  #ifdef CONFIG_BLK_CGROUP
>  	struct cgroup_subsys_state *blkcg_css;
>  #endif
> -	/* To store the full name if task comm is truncated. */
> -	char *full_name;
>  	struct task_struct *task;
>  	struct list_head hotplug_node;
>  	struct cpumask *preferred_affinity;
> @@ -108,12 +106,12 @@ void get_kthread_comm(char *buf, size_t buf_size, struct task_struct *tsk)
>  {
>  	struct kthread *kthread = to_kthread(tsk);
>  
> -	if (!kthread || !kthread->full_name) {
> +	if (!kthread || !tsk->full_name) {
>  		strscpy(buf, tsk->comm, buf_size);
>  		return;
>  	}
>  
> -	strscpy_pad(buf, kthread->full_name, buf_size);
> +	strscpy_pad(buf, tsk->full_name, buf_size);
>  }
>  
>  bool set_kthread_struct(struct task_struct *p)
> @@ -153,7 +151,6 @@ void free_kthread_struct(struct task_struct *k)
>  	WARN_ON_ONCE(kthread->blkcg_css);
>  #endif
>  	k->worker_private = NULL;
> -	kfree(kthread->full_name);
>  	kfree(kthread);
>  }
>  
> @@ -430,7 +427,7 @@ static int kthread(void *_create)
>  		kthread_exit(-EINTR);
>  	}
>  
> -	self->full_name = create->full_name;
> +	self->task->full_name = create->full_name;
>  	self->threadfn = threadfn;
>  	self->data = data;
>  
> -- 
> 2.38.1
> 

-- 
Kees Cook
Re: [PATCH v2 3/3] kthread: Use 'task_struct->full_name' to store kthread's full name
Posted by Bhupesh Sharma 8 months, 2 weeks ago
Hi Kees,

On 4/3/25 9:54 PM, Kees Cook wrote:
> On Mon, Mar 31, 2025 at 05:48:20PM +0530, Bhupesh wrote:
>> Commit 6986ce24fc00 ("kthread: dynamically allocate memory to store
>> kthread's full name"), added 'full_name' in parallel to 'comm' for
>> kthread names.
>>
>> Now that we have added 'full_name' added to 'task_struct' itself,
>> drop the additional 'full_name' entry from 'struct kthread' and also
>> its usage.
>>
>> Signed-off-by: Bhupesh <bhupesh@igalia.com>
> I'd like to see this patch be the first patch in the series. This show
> the existing use for "full_name". (And as such it'll probably need bits
> from patch 1.)

Sure, I will fix this in v3.

Thanks,
Bhupesh

>
>> ---
>>   kernel/kthread.c | 9 +++------
>>   1 file changed, 3 insertions(+), 6 deletions(-)
>>
>> diff --git a/kernel/kthread.c b/kernel/kthread.c
>> index 5dc5b0d7238e..46fe19b7ef76 100644
>> --- a/kernel/kthread.c
>> +++ b/kernel/kthread.c
>> @@ -66,8 +66,6 @@ struct kthread {
>>   #ifdef CONFIG_BLK_CGROUP
>>   	struct cgroup_subsys_state *blkcg_css;
>>   #endif
>> -	/* To store the full name if task comm is truncated. */
>> -	char *full_name;
>>   	struct task_struct *task;
>>   	struct list_head hotplug_node;
>>   	struct cpumask *preferred_affinity;
>> @@ -108,12 +106,12 @@ void get_kthread_comm(char *buf, size_t buf_size, struct task_struct *tsk)
>>   {
>>   	struct kthread *kthread = to_kthread(tsk);
>>   
>> -	if (!kthread || !kthread->full_name) {
>> +	if (!kthread || !tsk->full_name) {
>>   		strscpy(buf, tsk->comm, buf_size);
>>   		return;
>>   	}
>>   
>> -	strscpy_pad(buf, kthread->full_name, buf_size);
>> +	strscpy_pad(buf, tsk->full_name, buf_size);
>>   }
>>   
>>   bool set_kthread_struct(struct task_struct *p)
>> @@ -153,7 +151,6 @@ void free_kthread_struct(struct task_struct *k)
>>   	WARN_ON_ONCE(kthread->blkcg_css);
>>   #endif
>>   	k->worker_private = NULL;
>> -	kfree(kthread->full_name);
>>   	kfree(kthread);
>>   }
>>   
>> @@ -430,7 +427,7 @@ static int kthread(void *_create)
>>   		kthread_exit(-EINTR);
>>   	}
>>   
>> -	self->full_name = create->full_name;
>> +	self->task->full_name = create->full_name;
>>   	self->threadfn = threadfn;
>>   	self->data = data;
>>   
>> -- 
>> 2.38.1
>>