Subject: Re: crcmp(), once again
To: Eric Haszlakiewicz <erh@jodi.nimenees.com>
From: Tom Spindler <dogcow@babymeat.com>
List: tech-kern
Date: 11/17/2005 21:44:09
> 	I spent a minute or two reading that code when I found when crcmp()
> is used, and decided I didn't have the time to actually understand
> what it is doing and WHY it checks if one credential is the same as
> some other one, or WHERE those credentials come from.

The relevant change shows up in 1.195 of src/sys/kern/vfs_subr.c:

from the commit message:

date: 2003/05/16 14:01:56;  author: christos;  state: Exp;  lines: +74 -27
Fix a variety of kernel panics related to unchecked export data:
[...]
3. we only know about inet4 and inet6, so make sure that the corresponding
   data is valid before using it.

and the code itself:

+check:
                if (enp->netc_exflags != argp->ex_flags ||
-                   enp->netc_anon.cr_uid != argp->ex_anon.cr_uid ||
-                   enp->netc_anon.cr_gid != argp->ex_anon.cr_gid ||
-                   enp->netc_anon.cr_ngroups !=
-                                       (uint32_t) argp->ex_anon.cr_ngroups ||
-                   memcmp(&enp->netc_anon.cr_groups, &argp->ex_anon.cr_groups,
-                       enp->netc_anon.cr_ngroups))
+           crcmp(&enp->netc_anon, &argp->ex_anon) != 0)

Presumably, this was intended as some sort of abstraction for other
nfs-like code. I imagine, as the code was subsequently split out
into only being in NFS, that the subroutine might be either
superfluous or or harmful.