[PATCH 25/27] NET: Add SO_PEERCONTEXT for multiple LSMs

Casey Schaufler casey at schaufler-ca.com
Mon Jul 29 15:04:11 UTC 2019


On 7/29/2019 6:00 AM, Simon McVittie wrote:
> On Fri, 26 Jul 2019 at 16:39:21 -0700, Casey Schaufler wrote:
>> A new option SO_PEERCONTEXT is added to report the
>> security "context" of multiple modules using a "compound" format
>>
>> 	lsm1\0value\0lsm2\0value\0
>> +		/*
>> +		 * A compound context, in the form lsm='value'[,lsm='value']...
>> +		 */
> Presumably the commit message (and the implementation) means the comment
> is out of date?

Yup. The curse of incremental development.


>> +			/*
>> +			 * Don't propogate trailing nul bytes.
>> +			 */
>> +			clen = strnlen(cp, clen) + 1;
>> +			tlen = llen + clen;
> ...
>> +			memcpy(tp + finallen + llen, cp, clen);
> This assumes that cp points to a '\0'-terminated string, with the '\0'
> either inside the span of memory cp[clen]..cp[clen-1], or at cp[clen]
> (which is just outside the range that is obviously safe to access).
> Is that assumption robust?

James Morris, the security subsystem maintainer, says:

	"Security labels are strings, so this is implied."

>  If an LSM that worked with length-counted
> ("Pascal") strings internally would be allowed to fill the buffer with
> nonzero bytes and not place a '\0' immediately after it, then it would
> be necessary to insert the NUL explicitly:

True enough. I could use an embedded length format:

	[<lsmname\0><valuesize-u16><value>]...

but as James is willing to assert that security labels are strings
I don't think we need to go that far.

>
>     clen = strnlen(cp, clen);
>     tlen = llen + clen + 1;
>     ...
>     memcpy(tp + finallen + llen, cp, clen);
>     tp[finallen + llen + clen] = '\0';
>
> Thanks,
>     smcv




More information about the Linux-security-module-archive mailing list