[Tomoyo-dev 17] Re: CheckFilePerm2でGetPatternを呼ぶ条件を変更するパッチ

Back to archive index

Kentaro Takeda k.tak****@gmail*****
2007年 3月 2日 (金) 17:41:16 JST


何度も申し訳ありません。武田です。

パッチの作り方を間違っておりました。今度こそ決定版です。
カーネルのルートディレクトリにgetpattern.txtを置いて、
patch -p1 < getpattern.txt
であたります。

07/03/02 に Kentaro Takeda<k.tak****@gmail*****> さんは書きました:
> うおっ。Gmail君がパッチに改行を入れてくださった…。
> ということで添付ファイルで送りなおします。内容は同一です。
>
> 07/03/02 に Kentaro Takeda<k.tak****@gmail*****> さんは書きました:
> > tomoyo-devの皆さま、武田です。
> > 開発者が増えてにぎやかになってきそうですね。
> >
> > 仕様変更/性能改善パッチです。
> >
> > [Tomoyo-dev 8]の引用
> > >・対話的にアクセス要求の可否を指示する ccs-queryd に関して
> > > 「ポリシーに追加した上でアクセス要求を許可」する際に、
> > > 必要に応じてポリシーを編集できるようにしてみました。
> >
> > これに伴い、ccs-querydに渡されるパス名は例外ポリシのfile_patternを
> > 参照しないようにしたほうがよさそうですよね。
> > 対話的に追加するときにアクセス許可をユーザが任意に編集できるので。
> > また、今の実装では、学習モードでなくても、許可がないアクセスに対しては
> > GetPatternという重たい関数を呼んでいるので、
> > これを学習モードの時だけ呼ぶようにすることで性能が改善するはずです。
> >
> > ということで、パッチを作成しました。
> >
> > これをあてると以下のように変わります。
> > ・ccs-querydにはパターンを含まない絶対パスがわたるようになる。
> > ・学習モード以外ではGetPatternを呼ばないので、
> > アクセス許可がないアクセスに対する処理が早くなる
> >
> > どんなもんでしょう?
> >
> > --- fs/tomoyo_file.c.orig       2007-02-14 00:00:00.000000000 +0900
> > +++ fs/tomoyo_file.c    2007-03-02 14:40:19.000000000 +0900
> > @@ -627,13 +627,15 @@ static int CheckFilePerm2(const struct p
> >         if (error) {
> >                 struct domain_info * const domain = current->domain_info;
> >                 const int is_enforce = CheckCCSEnforce(CCS_TOMOYO_MAC_FOR_FILE);
> > -               /* Don't use patterns if execution bit is on. */
> > -               const struct path_info *patterned_file = ((perm & 1)
> > == 0) ? GetPattern(filename) : filename;
> >                 if (TomoyoVerboseMode()) {
> >                         printk("TOMOYO-%s: Access %d(%s) to %s denied
> > for %s\n", GetMSG(is_enforce), perm, operation, filename->name,
> > GetLastName(domain));
> >                 }
> > -               if (is_enforce) error = CheckSupervisor("%s\n%d %s\n",
> > domain->domainname->name, perm, patterned_file->name);
> > -               else if (CheckCCSAccept(CCS_TOMOYO_MAC_FOR_FILE))
> > AddFileACL(patterned_file->name, perm, domain, 1, NULL);
> > +               if (is_enforce) error = CheckSupervisor("%s\n%d %s\n",
> > domain->domainname->name, perm, filename->name);
> > +               else if (CheckCCSAccept(CCS_TOMOYO_MAC_FOR_FILE)) {
> > +                       /* Don't use patterns if execution bit is on. */
> > +                       const struct path_info *patterned_file =
> > ((perm & 1) == 0) ? GetPattern(filename) : filename;
> > +                       AddFileACL(patterned_file->name, perm, domain, 1, NULL);
> > +               }
> >                 if (!is_enforce) error = 0;
> >         }
> >         return error;
> >
>
>
-------------- next part --------------
--- old/fs/tomoyo_file.c	2007-02-14 00:00:00.000000000 +0900
+++ new/fs/tomoyo_file.c	2007-03-02 14:40:19.000000000 +0900
@@ -627,13 +627,15 @@
 	if (error) {
 		struct domain_info * const domain = current->domain_info;
 		const int is_enforce = CheckCCSEnforce(CCS_TOMOYO_MAC_FOR_FILE);
-		/* Don't use patterns if execution bit is on. */
-		const struct path_info *patterned_file = ((perm & 1) == 0) ? GetPattern(filename) : filename;
 		if (TomoyoVerboseMode()) {
 			printk("TOMOYO-%s: Access %d(%s) to %s denied for %s\n", GetMSG(is_enforce), perm, operation, filename->name, GetLastName(domain));
 		}
-		if (is_enforce) error = CheckSupervisor("%s\n%d %s\n", domain->domainname->name, perm, patterned_file->name);
-		else if (CheckCCSAccept(CCS_TOMOYO_MAC_FOR_FILE)) AddFileACL(patterned_file->name, perm, domain, 1, NULL);
+		if (is_enforce) error = CheckSupervisor("%s\n%d %s\n", domain->domainname->name, perm, filename->name);
+		else if (CheckCCSAccept(CCS_TOMOYO_MAC_FOR_FILE)) {
+			/* Don't use patterns if execution bit is on. */
+			const struct path_info *patterned_file = ((perm & 1) == 0) ? GetPattern(filename) : filename;
+			AddFileACL(patterned_file->name, perm, domain, 1, NULL);
+		}
 		if (!is_enforce) error = 0;
 	}
 	return error;


tomoyo-dev メーリングリストの案内
Back to archive index