* James Morris <[EMAIL PROTECTED]> 2006-05-31 11:42
> On Wed, 31 May 2006, jamal wrote:
> 
> > To also answer your other email:
> > Look at  security/selinux/nlmsgtab.c for example for NETLINK_ROUTE
> > and compare with NETLINK_GENERIC to see the hole. I was suggesting if
> > we started by just adding checks for NETLINK_GENERIC first in those
> > tables (currently lacking), that would be a good start.
> 
> They're currently mediated as a generic netlink socket type at a higher 
> level: they're not unmediated, just not fine grained enough to know what 
> kind of message is being sent.

It shouldn't be hard to split what is implemented in nlmsg_route_perms[]
for NETLINK_ROUTE into the definitions of the generic netlink
operations, could look like this:

struct genl_ops some_op = {
        [...]
        .perm    = NETLINK_GENERIC_SOCKET__NLMSG_READ,
};

int genl_lookup_perm(u16 nlmsg_type, u8 cmd)
{
        struct genl_family *family;
        struct genl_ops *ops;

        family = genl_family_find_byid(nlmsg_type);
        ops = genl_get_cmd(cmd, family);

        return ops->perm;
}

int genl_peek_cmd(struct nlmsghdr *nlh)
{
        struct genlmsghdr *hdr = nlmsg_data(nlh);

        if (nlh->nlmsglen < nlmsg_msg_sizeo(GENL_HDRLEN))
                return -EINVAL;

        return hdr->cmd;
}


selinux_lookup() must take struct nlmsghdr as an additional argument

        case SECCLASS_NETLINK_GENERIC_SOCKET:
                cmd = genl_peek_cmd(nlh)
                *perm = genl_lookup_perm(nlmsg_type, cmd);
                break;
-
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