Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 13 Mar 2019 20:36:22 +0100
From:      Hans Petter Selasky <hps@selasky.org>
To:        Konstantin Belousov <kostikbel@gmail.com>
Cc:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r345100 - head/sys/compat/linuxkpi/common/include/linux
Message-ID:  <57128db9-2ea0-f4e7-87d9-205397c9cbd2@selasky.org>
In-Reply-To: <20190313191447.GC2492@kib.kiev.ua>
References:  <201903131855.x2DItg7s091824@repo.freebsd.org> <20190313191447.GC2492@kib.kiev.ua>

next in thread | previous in thread | raw e-mail | index | archive | help
On 3/13/19 8:14 PM, Konstantin Belousov wrote:
> On Wed, Mar 13, 2019 at 06:55:42PM +0000, Hans Petter Selasky wrote:
>> Author: hselasky
>> Date: Wed Mar 13 18:55:41 2019
>> New Revision: 345100
>> URL: https://svnweb.freebsd.org/changeset/base/345100
>>
>> Log:
>>    Implement task_euid() and get_task_state() function macros in the LinuxKPI.
>>    
>>    Submitted by:		Johannes Lundberg <johalun0@gmail.com>
>>    MFC after:		1 week
>>    Sponsored by:		Limelight Networks
>>    Sponsored by:		Mellanox Technologies
>>
>> Modified:
>>    head/sys/compat/linuxkpi/common/include/linux/sched.h
>>
>> Modified: head/sys/compat/linuxkpi/common/include/linux/sched.h
>> ==============================================================================
>> --- head/sys/compat/linuxkpi/common/include/linux/sched.h	Wed Mar 13 18:53:29 2019	(r345099)
>> +++ head/sys/compat/linuxkpi/common/include/linux/sched.h	Wed Mar 13 18:55:41 2019	(r345100)
>> @@ -95,7 +95,9 @@ struct task_struct {
>>   #define	get_pid(x)		(x)
>>   #define	put_pid(x)		do { } while (0)
>>   #define	current_euid()	(curthread->td_ucred->cr_uid)
>> +#define	task_euid(task)	((task)->task_thread->td_ucred->cr_uid)
> This looks very strange if you compare the definition of task_euid()
> with the definition of linux_task_exiting() in r345098.
> 
> There you access td_ucred which is basically volatile and invalid unless
> the thread is known to be inhibited or sleeping (and not exiting).  So
> to use the macro safely for task not associated with current thread,
> you must have very strong and unusual external guarantees.
> 
> On the other hand, linux_task_exiting() correctly locks the target process.
> But, since the lock is dropped before the function returns, the process
> might exit wheh the callers gets to use the result.  Again, some external
> guarantees must be ensured to give safe use for this macro as well, for
> the target process != curproc.

Thanks for the feedback. I've forwarded it to Johannes Lundberg.

There are more patches at:
https://reviews.freebsd.org/D19565

--HPS




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?57128db9-2ea0-f4e7-87d9-205397c9cbd2>