2007年12月10日

[selinux-users:02087] Re: セキュアOSの性能評価機能の公開


中村です。

in message セキュアOSの性能評価機能の公開",
"MATSUDA Naoto" wrote:
> 岡山大学の松田と申します.
>
> 現在,IBMの宗藤さんと共同で,LSMのオーバーヘッド測定機能LSMPMONを開発

> し,以下のページで公開しています.
> http://www.swlab.it.okayama-u.ac.jp/lab/tabata/lsmpmon/
>
> 有用なツールだと思いますので,ぜひとも皆様に使用していただき,何らか
> のフィードバックを頂ければ,と考えています.
お疲れ様です!!

次回CE Linux Forumでも、これ関係の話がありますね。
http://tree.celinuxforum.org/CelfPubWiki/JapanTechnicalJamboree18

0:30pm..1:30 SE Linux for embedded systems (tentative)
Nakamura (Hitachi software)
1:30pm..2:30 LSMを利用したセキュアOSの性能評価機構 / Performance eveluation of Secure OS using LSM
- Naoto Matsuda (Okayama Univ.)
2:30pm..3:30 セキュリティ機能の開発動向と、組込み分野での課題(仮) / Latest development status od Security enhancement for Linux and the issues for use of embedded systems (tentative)
Kaigai (NEC)

宣伝ですが、
私からも、このところの組込みSELinux開発のまとめを話しますのでどうぞ。


コードを見てのコメントなのですが、
時間の計測方式については、
私は過去
sched_clock関数を使ってました。
SHでも動きました。
時間カウンタが一周したら知りませんが、簡易な計測では十分でした。

あとは、重複をもっと解消できそうな気がします。
例えば、
+static inline int security_inode_link (struct dentry *old_dentry,
+ struct inode *dir,
+ struct dentry *new_dentry)
+{
+ int rc;
+ unsigned long long start, end;
+
+ if (lsmpmon_enable) {
+ start = gettime();
+ if (unlikely (IS_PRIVATE (old_dentry->d_inode)))
+ rc = 0;
+ else
+ rc = security_ops->inode_link (old_dentry, dir, new_dentry);
+ end = gettime();
+ lsmpmon_store(difftime(start, end), lsm_inode_link);
+ return rc;
+ } else {
+ if (unlikely (IS_PRIVATE (old_dentry->d_inode)))
+ return 0;
+ return security_ops->inode_link (old_dentry, dir, new_dentry);
+ }
+}
というのがありますが、
if (unlikely...)以下3行が重複しています。
また、lsmpmon_security.h
で定義されているため、security.hとも重複しています。

思い切って、重複を解消しようとするならば、
例えば、下みたいに、
security.hに直に書くとか??
ただ、こんなマクロの使い方をしていいのか知らないので、
識者の方教えてください

#ifdef CONFIG_LSMPMON
#define LSMPMON_START \
unsigned long long start, end;\
if (lsmpmon_enable) {\
start = gettime();\
} \
#else
#define LSMPMON_START \
#endif

#ifdef CONFIG_LSMPMON
#define LSMPMON_END(hook) \
if (lsmpmon_enable) {\
end = gettime();\
lsmpmon_store(difftime(start, end), hook);\
}\
#else
#define LSMPMON_END(hook) \
#endif

static inline int security_inode_link (struct dentry *old_dentry,
struct inode *dir,
struct dentry *new_dentry)
{
int rc;
LSMPMON_START

if (unlikely (IS_PRIVATE (old_dentry->d_inode)))
rc = 0;
else
rc = security_ops->inode_link (old_dentry, dir, new_dentry);

LSMPMON_END(lsm_inode_link)
return rc;

}

LSMモジュール化しようとしても、
モジュールのスタックは、まだできないのですよね。

Yuichi Nakamura


投稿者 xml-rpc : 2007年12月10日 12:13
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/67448
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。