lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-ID: <20071027234719.GU8181@ftp.linux.org.uk> Date: Sun, 28 Oct 2007 00:47:19 +0100 From: Al Viro <viro@....linux.org.uk> To: "Ahmed S. Darwish" <darwish.07@...il.com> Cc: casey@...aufler-ca.com, akpm@...l.org, torvalds@...l.org, linux-security-module@...r.kernel.org, linux-kernel@...r.kernel.org Subject: Re: [PATCH 2/2] Version 9 (2.6.24-rc1) Smack: Simplified Mandatory Access Control Kernel On Sat, Oct 27, 2007 at 11:01:12AM +0200, Ahmed S. Darwish wrote: > The problem here (As discussed in private mails) is that the for loop > assumes that the beginning of given user-space buffer is the beginning > of a rule. This leads to situations where the rule becomes "ecret 20", > or "cret 20" instead of "Secret 20". Big input buffers/files leads > smack to recieve a rule like "Secret 20" in fragmented chunks like: > > write("<lots of rules before ours>\nSec", ..) > write("r", 1, ..) > write("et 20\n<remaing rules after ours>", ..) > > Parsing a rule in such tough conditions in _kernel space_ is very > hard. I began to feel that it will be much easier if we do the parsing > in a userspace utility and let smack accept only small buffers (80 char). For crying out louf, all it takes is a finite state machine... BTW, folks, your parser *and* input language suck. Really. Silently allowing noise is Dumb(tm). Please, write the grammar down and _follow_ _it_. AFAICS, trimming the crap ("we have a number, skip everything until '/', whatever noise we have there doesn't matter") leads to something like text: (whitespace line? \n)* whitespace: [ \t]* line: label whitespace number whitespace (/ whitespace set whitespace)? set: number (whitespace , whitespace number)* label: [!-.0-~]{1,23} number: [0-9]+ and even that might be too liberal. For fsck sake, all you need is to keep a struct that would contain * state * (partial) number * list of smack_known, with the first element being the partial one. * number of characters already seen in label (label itself stored in the list head ->smk_known) and that's it - just have a switch by ->state to handle the next character. Allocate that struct in ->open(), modify in ->write(), apply the entire thing at once in ->release(). Come on, people, this is ridiculous - why bother reinventing the wheels for the stuff that belongs to exercises halfway through any self-respecting introductory textbook? Scary parser, my arse... - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists