tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: rwlock issue in secmodel
Le 27/10/2014 21:21, Lars Heidieker a écrit :
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On Mon, 27 Oct 2014 16:42:15 +0100
> Maxime Villard <max%M00nBSD.net@localhost> wrote:
>
>> Hi,
>> I think there's a rwlock issue in secmodel/secmodel.c:
>>
>> 174 if (sm == NULL) {
>> 175 error = EFAULT;
>> 176 goto out;
>> 177 }
>> 178
>> 179 /* Check if the secmodel is already present. */
>> 180 rw_enter(&secmodels_lock, RW_WRITER);
>> ...
>> out:
>> 194 /* Unlock the secmodels list. */
>> 195 rw_exit(&secmodels_lock);
>> 196
>> 197 return error;
>>
>> This goto out will release secmodels_lock while it is not yet held,
>> right?
>>
>> The same in secmodel_unplug().
>>
>
> Yes, seems that way to me.
> secmodel_plug is only called from secmodel_register, where it would
> crash anyway if sm is NULL so it should be an assert, right?
yes, but in case it gets used in the future...
> (and for unplug the check should be in secmodel_deregister)
>
> Lars
>
Index: secmodel.c
===================================================================
RCS file: /cvsroot/src/sys/secmodel/secmodel.c,v
retrieving revision 1.1
diff -u -r1.1 secmodel.c
--- secmodel.c 4 Dec 2011 19:24:59 -0000 1.1
+++ secmodel.c 30 Oct 2014 17:17:36 -0000
@@ -171,10 +171,8 @@
secmodel_t tsm;
int error = 0;
- if (sm == NULL) {
- error = EFAULT;
- goto out;
- }
+ if (sm == NULL)
+ return EFAULT;
/* Check if the secmodel is already present. */
rw_enter(&secmodels_lock, RW_WRITER);
@@ -203,10 +201,8 @@
secmodel_t tsm;
int error = 0;
- if (sm == NULL) {
- error = EFAULT;
- goto out;
- }
+ if (sm == NULL)
+ return EFAULT;
/* Make sure the secmodel is present. */
rw_enter(&secmodels_lock, RW_WRITER);
Ok?
Home |
Main Index |
Thread Index |
Old Index