From: Al Viro <viro@ftp.linux.org.uk>
To: "Ahmed S. Darwish" <darwish.07@gmail.com>
Cc: casey@schaufler-ca.com, akpm@osdl.org, torvalds@osdl.org,
linux-security-module@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2/2] Version 9 (2.6.24-rc1) Smack: Simplified Mandatory Access Control Kernel
Date: Sun, 28 Oct 2007 00:47:19 +0100 [thread overview]
Message-ID: <20071027234719.GU8181@ftp.linux.org.uk> (raw)
In-Reply-To: <20071027090112.GA5460@Ahmed>
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...
next prev parent reply other threads:[~2007-10-27 23:47 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-10-25 3:46 [PATCH 2/2] Version 9 (2.6.24-rc1) Smack: Simplified Mandatory Access Control Kernel Casey Schaufler
2007-10-25 15:07 ` Stephen Smalley
2007-10-25 18:58 ` Casey Schaufler
2007-10-26 20:34 ` Stephen Smalley
2007-10-27 3:00 ` Ahmed S. Darwish
2007-10-27 19:20 ` Casey Schaufler
2007-10-27 9:01 ` Ahmed S. Darwish
2007-10-27 23:47 ` Al Viro [this message]
2007-10-28 5:41 ` Casey Schaufler
2007-10-28 12:46 ` Ahmed S. Darwish
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20071027234719.GU8181@ftp.linux.org.uk \
--to=viro@ftp.linux.org.uk \
--cc=akpm@osdl.org \
--cc=casey@schaufler-ca.com \
--cc=darwish.07@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-security-module@vger.kernel.org \
--cc=torvalds@osdl.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.