From: KaiGai Kohei <kaigai@kaigai.gr.jp>
To: James Morris <jmorris@namei.org>
Cc: KaiGai Kohei <kaigai@ak.jp.nec.com>,
Stephen Smalley <sds@tycho.nsa.gov>,
selinux@tycho.nsa.gov, Paul Moore <paul.moore@hp.com>,
Yuichi Nakamura <ynakam@hitachisoft.jp>,
Eric Paris <eparis@parisplace.org>
Subject: Re: [PATCH] Improve SELinux performance when AVC misses.
Date: Wed, 03 Oct 2007 00:12:22 +0900 [thread overview]
Message-ID: <47025FD6.3090803@kaigai.gr.jp> (raw)
In-Reply-To: <Xine.LNX.4.64.0709281408080.18330@us.intercode.com.au>
James Morris wrote:
> On Sat, 29 Sep 2007, KaiGai Kohei wrote:
>
>> Stephen Smalley wrote:
>>> On Fri, 2007-09-28 at 19:56 +0900, KaiGai Kohei wrote:
>>>> James Morris wrote:
>>>>>> ++ struct ebitmap_node *_n;
>>>>>> ++ _n = kzalloc(sizeof(*_n), GFP_KERNEL);
>>>>> Leading underscores are usually used to indicate that core code is not
>>>>> supposed to use the symbol. Please change it to not have a leading
>>>>> underscore. 'tmp' or 'n2' is probably ok.
>>>> OK, I replaced all of '_n' by 'tmp'.
>>>> Rest of the part in the following patch is same as the previous one.
>>> Seems to be damaged, or at least doesn't apply for me. What is it
>>> relative to?
>> I generated the patch against to the latest of James's git tree
>> But it seems to me that all tab chatacters are translated into
>> four white spaces, when I copied and pasted the patch.
>> I'm sorry, it was my misoperation.
>>
>> Can you receive it with tab kept in this time?
>
> Yes, but there are compiler warnings on 64-bit.
>
> Please test it on a 64-bit machine.
>
> $ make -j3 SUBDIRS=security
> CC security/selinux/ss/ebitmap.o
> CC security/selinux/ss/sidtab.o
> CC security/selinux/ss/avtab.o
> security/selinux/ss/ebitmap.c: In function ‘ebitmap_netlbl_import’:
> security/selinux/ss/ebitmap.c:196: warning: right shift count >= width of type
> security/selinux/ss/ebitmap.c: In function ‘ebitmap_read’:
> security/selinux/ss/ebitmap.c:393: warning: format ‘%Zd’ expects type ‘signed size_t’, but argument 3 has type ‘u32’
> security/selinux/ss/ebitmap.c:399: warning: format ‘%Zd’ expects type ‘signed size_t’, but argument 3 has type ‘u32’
> security/selinux/ss/ebitmap.c:437: warning: right shift count >= width of type
The attached patch kills these warnings.
While killing them, I faced to a serious bug.
At first, I expected the following while { ... } block is never looped
multiple time in 64-bit architecture.
--------
+#if EBITMAP_UNIT_SIZE == 64
+ n->maps[index] = map;
+#else
while (map) {
n->maps[index] = map & (-1UL);
map = map >> EBITMAP_UNIT_SIZE;
index++;
}
+#endif
--------
However, I might misunderstand about the works of shift operations.
When we tries to shift a variable with the width of it, this operation
does not give us any effect.
See the following small code.
[kaigai@masu ~]$ cat hoge.c
#include <stdio.h>
int main(int argc, char *argv[]) {
unsigned long code = -1UL;
printf("code = %016lx\n", code);
printf("code >> 16 = %016lx\n", code >> 16);
printf("code >> 63 = %016lx\n", code >> 63);
printf("code >> 64 = %016lx\n", code >> 64);
printf("code >> 65 = %016lx\n", code >> 65);
return 0;
}
[kaigai@masu ~]$ env LANG=C gcc hoge.c
hoge.c: In function 'main':
hoge.c:9: warning: right shift count >= width of type
hoge.c:10: warning: right shift count >= width of type
[kaigai@masu ~]$ ./a.out
code = ffffffffffffffff
code >> 16 = 0000ffffffffffff
code >> 63 = 0000000000000001
code >> 64 = ffffffffffffffff
code >> 65 = 7fffffffffffffff
[kaigai@masu ~]$ uname -m
x86_64
I was suprised at. :-)
It is the reason why I put #if block to separate 64bit/32bit cases.
Do you have any idea to write it more simply?
----------------------------------------
[PATCH] kills warnings in Improve SELinux performance when AVC misses
This patch kills ugly warnings when the "Improve SELinux performance
when ACV misses" patch.
Signed-off-by: KaiGai Kohei <kaigai@ak.jp.nec.com>
---
security/selinux/ss/ebitmap.c | 12 ++++++++++--
1 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/security/selinux/ss/ebitmap.c b/security/selinux/ss/ebitmap.c
index ae44c0c..2e21ca1 100644
--- a/security/selinux/ss/ebitmap.c
+++ b/security/selinux/ss/ebitmap.c
@@ -191,10 +191,14 @@ int ebitmap_netlbl_import(struct ebitmap *ebmap,
delta = c_pos - e_iter->startbit;
e_idx = delta / EBITMAP_UNIT_SIZE;
e_sft = delta % EBITMAP_UNIT_SIZE;
+#if EBITMAP_UNIT_SIZE == 64
+ e_iter->maps[e_idx] |= map;
+#else
while (map) {
e_iter->maps[e_idx++] |= map & (-1UL);
map >>= EBITMAP_UNIT_SIZE;
}
+#endif
}
c_iter = c_iter->next;
} while (c_iter != NULL);
@@ -389,13 +393,13 @@ int ebitmap_read(struct ebitmap *e, void *fp)
if (startbit & (mapunit - 1)) {
printk(KERN_ERR "security: ebitmap start bit (%d) is "
- "not a multiple of the map unit size (%Zd)\n",
+ "not a multiple of the map unit size (%u)\n",
startbit, mapunit);
goto bad;
}
if (startbit > e->highbit - mapunit) {
printk(KERN_ERR "security: ebitmap start bit (%d) is "
- "beyond the end of the bitmap (%Zd)\n",
+ "beyond the end of the bitmap (%u)\n",
startbit, (e->highbit - mapunit));
goto bad;
}
@@ -432,11 +436,15 @@ int ebitmap_read(struct ebitmap *e, void *fp)
map = le64_to_cpu(map);
index = (startbit - n->startbit) / EBITMAP_UNIT_SIZE;
+#if EBITMAP_UNIT_SIZE == 64
+ n->maps[index] = map;
+#else
while (map) {
n->maps[index] = map & (-1UL);
map = map >> EBITMAP_UNIT_SIZE;
index++;
}
+#endif
}
ok:
rc = 0;
--
KaiGai Kohei <kaigai@kaigai.gr.jp>
--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with
the words "unsubscribe selinux" without quotes as the message.
next prev parent reply other threads:[~2007-10-02 15:12 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-21 4:29 [patch] Tuning avtab to reduce memory usage Yuichi Nakamura
2007-08-21 13:47 ` Stephen Smalley
2007-08-21 14:19 ` Yuichi Nakamura
2007-08-21 15:11 ` Paul Moore
2007-08-21 16:37 ` Stephen Smalley
2007-08-21 16:55 ` Paul Moore
2007-08-22 9:25 ` KaiGai Kohei
2007-09-12 3:08 ` KaiGai Kohei
2007-09-12 19:54 ` Paul Moore
2007-09-13 1:37 ` [PATCH] Improve ebitmap scanning (Re: [patch] Tuning avtab to reduce memory usage) KaiGai Kohei
2007-09-13 11:34 ` Stephen Smalley
2007-09-14 1:02 ` Wrappers to load bitmaps (Re: [PATCH] Improve ebitmap scanning) KaiGai Kohei
2007-09-14 1:02 ` KaiGai Kohei
2007-09-13 20:47 ` [PATCH] Improve ebitmap scanning (Re: [patch] Tuning avtab to reduce memory usage) Paul Moore
2007-09-18 17:21 ` [patch] Tuning avtab to reduce memory usage Stephen Smalley
2007-09-18 22:11 ` Paul Moore
2007-09-20 8:14 ` KaiGai Kohei
2007-09-21 19:21 ` Stephen Smalley
2007-09-25 5:06 ` KaiGai Kohei
2007-09-25 12:04 ` Paul Moore
2007-09-25 13:53 ` Stephen Smalley
2007-09-26 5:49 ` [PATCH] Improve SELinux performance when AVC misses KaiGai Kohei
2007-09-27 2:22 ` KaiGai Kohei
2007-09-27 2:43 ` KaiGai Kohei
2007-09-27 20:47 ` James Morris
2007-09-28 10:56 ` KaiGai Kohei
2007-09-28 14:47 ` Stephen Smalley
2007-09-28 17:20 ` KaiGai Kohei
2007-09-28 18:40 ` Stephen Smalley
2007-09-28 21:09 ` James Morris
2007-10-02 15:12 ` KaiGai Kohei [this message]
2007-10-02 15:28 ` Stephen Smalley
2007-10-03 13:41 ` KaiGai Kohei
2007-10-03 14:42 ` KaiGai Kohei
2007-10-04 0:37 ` James Morris
2007-08-21 14:00 ` [patch] Tuning avtab to reduce memory usage James Morris
2007-08-22 2:55 ` Yuichi Nakamura
2007-08-22 3:42 ` KaiGai Kohei
2007-08-22 13:44 ` James Morris
2007-08-23 0:57 ` Yuichi Nakamura
2007-08-23 13:15 ` Stephen Smalley
2007-08-24 2:55 ` Yuichi Nakamura
2007-08-27 13:39 ` Stephen Smalley
2007-08-27 16:55 ` James Morris
2008-01-31 21:00 ` Stephen Smalley
2008-01-31 21:44 ` Stephen Smalley
2008-02-01 4:59 ` Yuichi Nakamura
2007-08-23 14:46 ` James Morris
2007-08-24 2:33 ` Yuichi Nakamura
2007-08-22 16:05 ` James Morris
2007-08-21 19:43 ` J. Tang
2007-08-22 3:11 ` Yuichi Nakamura
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=47025FD6.3090803@kaigai.gr.jp \
--to=kaigai@kaigai.gr.jp \
--cc=eparis@parisplace.org \
--cc=jmorris@namei.org \
--cc=kaigai@ak.jp.nec.com \
--cc=paul.moore@hp.com \
--cc=sds@tycho.nsa.gov \
--cc=selinux@tycho.nsa.gov \
--cc=ynakam@hitachisoft.jp \
/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.