I did this in too hurried a manner, sorry.

The basic idea that I wanted to convey is that multiple entries may 
succeed at flow_key_compare, but that only ones that are authorized are 
returned.  Since the 
cache is scanned sequentially, this approach seems acceptable to me. 
flow_key_compare is only used here and flow_cache_entry's are only used 
for xfrm_policy's, 
so it does not seem that any problems are caused by this assumption at 
present. 

If no authorizer is supplied, then the first entry is always returned as 
is the case now.

for (fle = *head; fle; fle = fle->next) {
187                 if (fle->family == family &&
188                     fle->dir == dir &&
189                     flow_key_compare(key, &fle->key) == 0) {
190                         if (fle->genid == atomic_read(&
flow_cache_genid)) {
191                                 void *ret = fle->object;
192 
+                                                          if (authorizer 
&& authorizer(sk, ret, key, dir) != 0)
+ continue;
+
193                                 if (ret)
194                                         atomic_inc(fle->object_ref);
195                                 local_bh_enable();
196 
197                                 return ret;
198                         }
199                         break;
200                 }
201         }

I need to verify that the selinux_xfrm_policy_lookup will correctly 
authorize an unlabelled context when the policy is null, but otherwise, 
this captures the intended modification.

Regards,
Trent.
------------------------------------------------------------
Trent Jaeger
IBM T.J. Watson Research Center
19 Skyline Drive, Hawthorne, NY 10532
(914) 784-7225, FAX (914) 784-7225




Herbert Xu <[EMAIL PROTECTED]>
07/18/2005 06:07 PM
 
        To:     Trent Jaeger/Watson/[EMAIL PROTECTED]
        cc:     [EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED], 
netdev@vger.kernel.org, Serge E Hallyn/Austin/[EMAIL PROTECTED], 
[EMAIL PROTECTED], [EMAIL PROTECTED]
        Subject:        Re: [PATCH 1/2] LSM-IPSec Networking Hooks -- 
authorizing flow_cache_entry's


On Mon, Jul 18, 2005 at 01:50:33PM -0400, jaegert wrote:
>
> @@ -190,8 +191,9 @@ void *flow_cache_lookup(struct flowi *ke
>                                                if (fle->genid == 
atomic_read(&flow_cache_genid)) {
>                                                                void *ret 
= fle->object;
> 
> -                                                              if (ret)
> +                                                              if (ret 
&& (authorizer(sk, ret, key, dir) == 0))
>  atomic_inc(fle->object_ref);
> +
> local_bh_enable();
> 
>                                                                return 
ret;

Sorry, but I don't see how this can work.  If the authorizer call fails,
we still return that object, albeit without the reference count.

We need to ponder this a bit more.

Cheers,
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[EMAIL PROTECTED]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt


-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to