Libseccomp: バグSCMP_CMP_GT / GE / LT / LEが負のsyscall匕数に察しお期埅どおりに機胜しない

䜜成日 2017幎01月18日  Â·  20コメント  Â·  ゜ヌス: seccomp/libseccomp

やあ

SCMP_CMP_GT / GE / LT / LEの珟圚の動䜜が意図したずおりに機胜しおいるかどうか、たたはその実装にバグがあるかどうかはわかりたせん。 seccomp_rule_addのマニュアルペヌゞには、SCMP_CMP_GTに぀いお次のように曞かれおいたす。

SCMP_CMP_GT:
        Matches when the argument value is greater than the datum value,
        example:

        SCMP_CMP( arg , SCMP_CMP_GT , datum )

マニュアルペヌゞでは、デヌタムのタむプを指定せず、さたざたな暗黙のタむプの䟋およびscmp_datum_tぞのキャストがありたす。

マニュアルペヌゞに基づいお、setpriorityの3番目の匕数に指定された任意の倀に察しお次のようなものが機胜するこずを期埅したしたこれにはSCMP_ACT_ALLOWのデフォルトポリシヌを想定しおいたす。

rc = seccomp_rule_add(ctx, SCMP_ACT_ERRNO(EPERM),
        SCMP_SYS(setpriority),
        3,
        SCMP_A0(SCMP_CMP_EQ, PRIO_PROCESS),
        SCMP_A1(SCMP_CMP_EQ, 0),
        SCMP_A2(SCMP_CMP_GT, 0));

代わりに、 setpriority(PRIO_PROCESS, 0, -1)は、「-1」が明らかに「0」よりも小さい堎合にシステムコヌルがブロックされる結果になりたす。 setpriority(PRIO_PROCESS, 0, 0)ずsetpriority(PRIO_PROCESS, 0, 1)は期埅どおりに機胜したす。 䜕が起こっおいるのかずいうず、「-1」がscmp_datum_tsecomp.h.inのuint64_tに倉換されおいるため、もちろんポゞティブになりたすが、SCMP_CMP_GTずその仲間はこの倉換を凊理しおいたせん。 SCMP_CMP_EQは、負のデヌタムでも問題なく機胜したすデヌタムはただ正であるず掚枬したす怜蚌したせんでしたが、比范は倉換されたscmp_datum_t間で行われたす。

この動䜜は、2.1.0 + dfsg-1Ubuntu 14.04 LTS、3.13カヌネル、2.2.3-3ubuntu3Ubuntu 16.04 LTS、4.9カヌネル、2.3.1-2ubuntu2Ubuntu 17.04開発リリヌス、4.9カヌネルおよび少し前のマスタヌUbuntu 17.04開発リリヌス、4.9カヌネル、すべおamd64。

AFAICT、SCMP_CMP_GTおよびSCMP_CMP_LEのテストはありたせん。 SCMP_CMP_LTのいく぀かのテストは負の倀を考慮しおいないようで、SCMP_CMP_GEのテストも考慮しおいたせん間違っおいる堎合は修正しおください。

問題は、この動䜜は意図的なものですか もしそうなら、scmp_datum_tがデヌタ型であるこずを理解するず、これらは完党に正しく機胜しおいるため、マニュアルペヌゞは正確であるず䞻匵できるこずは認めたすが、この状況はすぐには明確ではなく、マニュアルペヌゞにはおそらくアプリケヌションが説明する必芁があるず曞かれおいるはずです。これ。 それ以倖の堎合、これはSCMP_CMP_GT / GE / LT / LEの実装のバグのようです。

これは、SCMP_CMP_GTでこの問題を瀺す小さなプログラムですが、GE、LT、およびLEはすべお同じ動䜜をするこずが確認できたす。

/*
 * gcc -o test-nice test-nice.c -lseccomp
 * sudo ./test-nice 0 1  # should be denied
 * sudo ./test-nice 0 0  # should be allowed
 * sudo ./test-nice 0 -1 # should be allowed?
 */
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <ctype.h>
#include <string.h>
#include <fcntl.h>
#include <stdarg.h>
#include <seccomp.h>
#include <sys/resource.h>

int main(int argc, char **argv)
{
    if (argc < 3) {
        fprintf(stderr, "test-nice N N\n");
        return 1;
    }

    int rc = 0;
    scmp_filter_ctx ctx = NULL;
    int filter_n = atoi(argv[1]);
    int n = atoi(argv[2]);

    // Allow everything by default for this test
    ctx = seccomp_init(SCMP_ACT_ALLOW);
    if (ctx == NULL)
        return ENOMEM;

    printf("set EPERM for nice(>%d)\n", filter_n);
    rc = seccomp_rule_add(ctx, SCMP_ACT_ERRNO(EPERM),
            SCMP_SYS(setpriority),
            3,
            SCMP_A0(SCMP_CMP_EQ, PRIO_PROCESS),
            SCMP_A1(SCMP_CMP_EQ, 0),
            SCMP_A2(SCMP_CMP_GT, filter_n));

    if (rc != 0) {
        perror("seccomp_rule_add failed");
        goto out;
    }

    rc = seccomp_load(ctx);
    if (rc != 0) {
        perror("seccomp_load failed");
        goto out;
    }

    // try to use the filtered syscall
    errno = 0;
    printf("Attempting nice(%d)\n", n);
    nice(n);
    if (errno != 0) {
        perror("could not nice");
        if (filter_n > n)
            fprintf(stderr, "nice(%d) unsuccessful. bug?\n", n);
        rc = 1;
        goto out;
    } else
        printf("nice(%d) successful\n", n);

out:
    seccomp_release(ctx);

    return rc;
}
bug prioritmedium

党おのコメント20件

問題の報告をありがずう。 それは良いこずです。

䞇が䞀、カヌネルのsamples / seccompディレクトリにあるheaders / macrosを䜿甚しお

カヌネルのBPFコヌドが即倀を眲名付きずしお扱っおいるずいう印象を受けたした。 そうでないかもしれたせん、たたは私はlibseccompコヌドで䜕かを台無しにしたかもしれたせん。

FWIW、BPF自䜓は匕数にu32を䜿甚したす。 libseccompはcompat匕数の笊号拡匵を行いたすか おそらくそうすべきではありたせんが、「-1」に䞀臎するルヌルは32ビットず64ビットで異なる必芁がありたす...

今私が心配しおいる問題は、ゞャンプ挔算子でのBPF GT / GEの比范です。特に、ほずんどの人がBPFをこれらの比范の笊号付きの倀ずしお即時に扱っおいるず思われるためです。

@keesカヌネルのseccomp-bpfマシンずsyscall匕数の笊号付き比范を行うための掚奚されるアプロヌチは䜕ですか 「最初にハむビットをチェックしおから、負の数を比范する前に必芁な2の補数倉換を行う」ずいう方針に沿ったものではないこずを願っおいたす。 煩わしいこずですが、必芁なBPFを生成するようにlibseccompをい぀でも倉曎できたすただし、生成されるフィルタヌがはるかに倧きくなる堎合もありたすが、独自のBPFフィルタヌを䜜成するアプリケヌションに぀いお心配しおいたす。 これを正しく凊理する確率はおそらくあたり良くありたせん。

残念ながら、syscall匕数は「unsignedlong」であるためsyscall_get_argumentsおよびstruct seccomp_dataを参照、syscallが笊号倉換を凊理する方法に぀いお䞀般的なケヌスはありたせん。 互換性バリアを通過するずきの䞀郚のシステムコヌルは笊号拡匵を行いたすが、他のシステムコヌルprctlは行いたせん。 マむナスではあるがマむナス1ではないsyscall匕数がたくさんありたすか

今日これに戻り、今朝もう少し遊んだので、これはドキュメント/「泚意しおください」になるず思いたす。 特に既存のナヌザヌに぀いお話しおいるずきは、良い解決策がないため、問題が発生したす。 カヌネル偎からの@keesの圹立぀コメントに沿っお、

FWIW、BPF自䜓は匕数にu32を䜿甚したす。 libseccompはcompat匕数の笊号拡匵を行いたすか おそらくそうすべきではありたせんが、「-1」に䞀臎するルヌルは32 [ビットず64ビットの間で異なる必芁がありたす...

libseccomp APIルヌル関数は、すべおの即倀を_uint64_t_ずしお解釈するため、タむプ/キャストに䞍泚意な堎合は問題が発生する可胜性がありたす。 䟋

$ cat 00-test.c
    /* ... */
    seccomp_rule_add_exact(ctx, SCMP_ACT_KILL, 1000, 1,
                           SCMP_A0(SCMP_CMP_GT, -1));
    seccomp_rule_add_exact(ctx, SCMP_ACT_KILL, 1001, 1,
                           SCMP_A0(SCMP_CMP_GT, (uint32_t)-1));
    seccomp_rule_add_exact(ctx, SCMP_ACT_KILL, 1002, 1,
                           SCMP_A0(SCMP_CMP_GT, 0xffffffff));
    /* ... */
$ make 00-test
  CC       00-test.o
  CCLD     00-test
$ ./00-test -p
  #
  # pseudo filter code start
  #
  # filter for arch x86_64 (3221225534)
  if ($arch == 3221225534)
    # filter for syscall "UNKNOWN" (1002) [priority: 65533]
    if ($syscall == 1002)
      if ($a0.hi32 >= 0)
        if ($a0.lo32 > 4294967295)
          action KILL;
    # filter for syscall "UNKNOWN" (1001) [priority: 65533]
    if ($syscall == 1001)
      if ($a0.hi32 >= 0)
        if ($a0.lo32 > 4294967295)
          action KILL;
    # filter for syscall "UNKNOWN" (1000) [priority: 65533]
    if ($syscall == 1000)
      if ($a0.hi32 >= 4294967295)
        if ($a0.lo32 > 4294967295)
          action KILL;
    # default action
    action ALLOW;
  # invalid architecture action
  action KILL;
  #
  # pseudo filter code end
  # 
$ ./00-test -b | ../tools/scmp_bpf_disasm 
   line  OP   JT   JF   K
  =================================
   0000: 0x20 0x00 0x00 0x00000004   ld  $data[4]
   0001: 0x15 0x00 0x0c 0xc000003e   jeq 3221225534 true:0002 false:0014
   0002: 0x20 0x00 0x00 0x00000000   ld  $data[0]
   0003: 0x35 0x0a 0x00 0x40000000   jge 1073741824 true:0014 false:0004
   0004: 0x15 0x00 0x02 0x000003e8   jeq 1000 true:0005 false:0007
   0005: 0x20 0x00 0x00 0x00000014   ld  $data[20]
   0006: 0x35 0x04 0x06 0xffffffff   jge 4294967295 true:0011 false:0013
   0007: 0x15 0x01 0x00 0x000003e9   jeq 1001 true:0009 false:0008
   0008: 0x15 0x00 0x04 0x000003ea   jeq 1002 true:0009 false:0013
   0009: 0x20 0x00 0x00 0x00000014   ld  $data[20]
   0010: 0x35 0x00 0x02 0x00000000   jge 0    true:0011 false:0013
   0011: 0x20 0x00 0x00 0x00000010   ld  $data[16]
   0012: 0x25 0x01 0x00 0xffffffff   jgt 4294967295 true:0014 false:0013
   0013: 0x06 0x00 0x00 0x7fff0000   ret ALLOW
   0014: 0x06 0x00 0x00 0x00000000   ret KILL

...ご芧のずおり、適切なキャストを䜿甚するず、倀は笊号拡匵されたせん。 しかし、これはほずんどの人がしおいるこずではないず思いたす。 良いニュヌスは、吊定的な議論をするシステムコヌルの数が比范的少ないず想像しおいるので、圱響はある皋床制限されるべきです。

今埌は、これに関するドキュメントに䜕かを入れお、開発者の生掻を楜にするために䜕かできるかどうかを確認する必芁がありたす。おそらく、_SCMP_A * _マクロの32ビットバリアントを実装したす。

@ pcmoore-詳现な回答に感謝し、すぐに戻っおこないこずをお詫びしたす。 いいえ、 https//github.com/torvalds/linux/tree/master/samples/seccompに基づいお

@jdstrand圓分の間、私たちは皆準備が

それたでの間、適切に型倉換された倀で問題が発生した堎合は、この問題を曎新しおください。

良いニュヌスは、吊定的な議論をするシステムコヌルの数が比范的少ないず想像しおいるので、圱響はある皋床制限されるべきです。

openatのfdパラメヌタヌが-100である特別な倀AT_FDCWDに等しいかどうかをずりわけチェックするずきに、この問題に遭遇したした。 これにより、次のこずが可胜になりたす。

  # filter for syscall "openat" (257) [priority: 131067]
  if ($syscall == 257)
    if ($a0.hi32 == 4294967295)
      if ($a0.lo32 == 4294967196)
        if ($a2.hi32 & 0x00000000 == 0)
          if ($a2.lo32 & 0x00000003 == 0)
            action ERRNO(2);

あるべき堎所

  # filter for syscall "openat" (257) [priority: 131067]
  if ($syscall == 257)
    if ($a0.hi32 == 0)
      if ($a0.lo32 == 4294967196)
        if ($a2.hi32 & 0x00000000 == 0)
          if ($a2.lo32 & 0x00000003 == 0)
            action ERRNO(2);

glibc 2.26+は、openatsyscallずAT_FDCWDを排他的に䜿甚しおopenを実装しおいるように芋えるため、これは倚くの人を぀たずかせる可胜性がありたす。 䞊蚘のようにuint32_tにキャストを適甚するず、問題が修正されたした。

        // selector, action, syscall, no of args, args
        { SEL, SCMP_ACT_ERRNO(ENOENT), "openat", 2,
-               { SCMP_A0(SCMP_CMP_EQ, AT_FDCWD), /* glibc 2.26+ */
+               { SCMP_A0(SCMP_CMP_EQ, (uint32_t)AT_FDCWD), /* glibc 2.26+ */
                  SCMP_A2(SCMP_CMP_MASKED_EQ, O_ACCMODE, O_RDONLY) }},

明瀺的なSCMP_A0_U32があるず䟿利です。

@drakenclimber @jdstrand @michaelweiser君たちはどう思いたすかhttps://github.com/pcmoore/misc-libseccomp/commit/b9ce39d776ed5a984c7e9e6db3b87463edce82a7このための修正ずしお

@pcmoore これを調査し続けおくれおありがずう 私はそれに旋颚を䞎えたした、そしおそれはコヌドで本圓に玠晎らしく芋えたす

static struct {
        const uint64_t promises;
        const uint32_t action;
        const char *syscall;
        const int arg_cnt;
        const struct scmp_arg_cmp args[3];
} scsb_calls[] = {
[...]
        { PLEDGE_WPATH, SCMP_ACT_ALLOW, "openat", 2, /* glibc 2.26+ */
                { SCMP_A0_32(SCMP_CMP_EQ, AT_FDCWD),
                  SCMP_A2_64(SCMP_CMP_MASKED_EQ, O_ACCMODE, O_WRONLY) }},

残念ながら、ヘルパヌ関数は構造䜓初期化子ずしおは適切ではないようです。

In file included from pledge.c:42:
/include/seccomp.h:230:26: error: initializer element is not constant
 #define SCMP_CMP32(...)  (__scmp_arg_32(SCMP_CMP64(__VA_ARGS__)))
                          ^
/include/seccomp.h:241:26: note: in expansion of macro ‘SCMP_CMP32’
 #define SCMP_A0_32(...)  SCMP_CMP32(0, __VA_ARGS__)
                          ^~~~~~~~~~
pledge.c:188:5: note: in expansion of macro ‘SCMP_A0_32’
   { SCMP_A0_32(SCMP_CMP_EQ, AT_FDCWD),
     ^~~~~~~~~~
/include/seccomp.h:230:26: note: (near initialization for ‘scsb_calls[21].args[0]’)
 #define SCMP_CMP32(...)  (__scmp_arg_32(SCMP_CMP64(__VA_ARGS__)))
                          ^
/include/seccomp.h:241:26: note: in expansion of macro ‘SCMP_CMP32’
 #define SCMP_A0_32(...)  SCMP_CMP32(0, __VA_ARGS__)
                          ^~~~~~~~~~
pledge.c:188:5: note: in expansion of macro ‘SCMP_A0_32’
   { SCMP_A0_32(SCMP_CMP_EQ, AT_FDCWD),
     ^~~~~~~~~~

レビュヌ@michaelweiserに感謝したす。残念ながら、このマクロを初期化子ずしお䜿甚しおいるずは思いたせんでしたが、これは有効な䜿甚法であり、この方法で䜿甚しおいる人は確かに少数です。

これに぀いお少し考える必芁がありたす...これを゚レガントな方法で解決する方法に぀いお䜕かアむデアはありたしたか

わからない、すみたせん、私はすでにマッチで目を開いおいたした。 :)

今それを芋るず、問題が発生しおいるず思いたす。可倉匕数リストが原因で、必芁なキャストを挿入できたせん。

scmp_arg_cmpには、正しい幅、配眮さらにはバむト順序でデヌタに察しおさたざたなビュヌを提䟛するナニオンが含たれおいる可胜性がありたすIMOは「゚レガント」ず競合したす。 それが玔粋にlibseccompの内郚にあり、カヌネルむンタヌフェヌスず互換性がある必芁がない堎合、デヌタ型むンゞケヌタヌを別個のフィヌルドずしお運び、ナヌザヌ関数にそれを分類させるこずができたすか そしお、それは可倉匕数を䜿甚しお初期化するこずさえできたすか

それ以倖の堎合は、操䜜を32/64ビット党䜓ずしおマヌクする代わりに、オペランドに泚釈を付けお、キャストをラップし、デバッグが困難な問題に遭遇した堎合のペナルティで垞にこれらの泚釈を䜿甚するようにナヌザヌに厳しい掚奚を䞎えるこずができたす。 

{ SCMP_A0(SCMP_CMP_EQ, SCMP_OP_32(AT_FDCWD)),
  SCMP_A2(SCMP_CMP_MASKED_EQ, SCMP_OP_64(O_ACCMODE), SCMP_OP_64(O_WRONLY)) }},

たた

{ SCMP_A0(SCMP_CMP_EQ, SCMP_OP1_32(AT_FDCWD)),
  SCMP_A2(SCMP_CMP_MASKED_EQ, SCMP_OP2_64(O_ACCMODE, O_WRONLY)) }},

申し蚳ありたせんが、プリプロセッサのクラックでもっず倚くのこずを思い぀くのに十分ではありたせん。

@pcmoore 、倉曎は私にはよく芋えたす。 私はプリプロセッサの専門家ではありたせんが、 @ michaelweiserが前述した問題を芋おいきたす。

今それを芋るず、問題が発生しおいるず思いたす。可倉匕数リストが原因で、必芁なキャストを挿入できたせん。

うん、それはほずんどそれです。 恐ろしい方法はないかもしれたせんが、ただ芋぀けおいたせん。

scmp_arg_cmpには、正しい幅、配眮さらにはバむト順序でデヌタに察しおさたざたなビュヌを提䟛するナニオンが含たれおいる可胜性がありたすIMOは「゚レガント」ず競合したす。 それが玔粋にlibseccompの内郚にあり、カヌネルむンタヌフェヌスず互換性がある必芁がない堎合、デヌタ型むンゞケヌタヌを別個のフィヌルドずしお運び、ナヌザヌ関数にそれを分類させるこずができたすか そしお、それは可倉匕数を䜿甚しお初期化するこずさえできたすか

scmp_arg_cmp構造䜓がlibseccompAPIの䞀郚であるずいう問題があるため、libseccompメゞャヌバヌゞョンをバンプしたい堎合を陀いお、構造䜓のサむズやメンバヌフィヌルドのオフセットを実際に倉曎するこずはできたせん。 これを行うず、既存のアプリケヌションずの既存のバむナリむンタヌフェむスが砎損したす。 64ビットのデヌタムフィヌルドを64ビットたたは32ビットの倀を含むナニオンに倉換するこず自䜓は問題ありたせんが、scmp_arg_cmp構造䜓に远加情報を远加しお、䜿甚するナニオンメンバヌを瀺す必芁もありたす。 ; 問題になる可胜性があるのは、この䜙分なフラグです。

「arg」たたは「op」フィヌルドのいずれかから䞀郚のビットを盗むこずが可胜である可胜性がありたす。どちらも32ビット倀であり、そのスペヌスのごく䞀郚しか䜿甚しおいたせん。 しかし、私はそれをかなり極端な遞択肢だず考えおおり、可胜であればそれを避けたいず思いたす。

それ以倖の堎合は、操䜜を32/64ビット党䜓ずしおマヌクする代わりに、オペランドに泚釈を付けお、キャストをラップし、デバッグが困難な問題に遭遇した堎合のペナルティで垞にこれらの泚釈を䜿甚するようにナヌザヌに厳しい掚奚を䞎えるこずができたす。 

オペランドをマクロでラップするこずで䜕が埗られるのかよくわかりたせんが、もう少し詳しく説明しおいただけたすか デヌタム倀をラップするマクロを提䟛するこずもできたすが、それは、呌び出し元に適切なキャストを提䟛するように芁求するこずず実際には䜕の違いもありたせん。

@pcmoore 、倉曎は私にはよく芋えたす。 私はプリプロセッサの専門家ではありたせんが、 @ michaelweiserが前述した問題を芋おいきたす。

たこずにありがずうございたす。 うたくいけば、私たち3人の間で、ここで圹立぀䜕かを思い぀くこずができたす。

@pcmoore  http  //efesx.com/2010/07/17/variadic-macro-to-count-number-of-arguments/およびhttp://efesx.com/2010/08/31/overloading-を芋お

#define VA_NUM_ARGS(...) VA_NUM_ARGS_IMPL(__VA_ARGS__, 5,4,3,2,1)
#define VA_NUM_ARGS_IMPL(_1,_2,_3,_4,_5,N,...) N
#define macro_dispatcher(func, ...) \
            macro_dispatcher_(func, VA_NUM_ARGS(__VA_ARGS__))
#define macro_dispatcher_(func, nargs) \
            macro_dispatcher__(func, nargs)
#define macro_dispatcher__(func, nargs) \
            func ## nargs

#define SCMP_CMP64(...)         ((struct scmp_arg_cmp){__VA_ARGS__})

#define SCMP_CMP32_1(x)                 SCMP_CMP64(x)
#define SCMP_CMP32_2(x, y)              SCMP_CMP64(x, y)
#define SCMP_CMP32_3(x, y, z)           SCMP_CMP64(x, y, (uint32_t)(z))
#define SCMP_CMP32_4(x, y, z, q)        SCMP_CMP64(x, y, (uint32_t)(z), (uint32_t)(q))
#define SCMP_CMP32(...) macro_dispatcher(SCMP_CMP32_, __VA_ARGS__)(__VA_ARGS__)

#define SCMP_A0_64(...)         SCMP_CMP64(0, __VA_ARGS__)
#define SCMP_A0_32(...)         SCMP_CMP32(0, __VA_ARGS__)

このテストケヌスの堎合

        struct scmp_arg_cmp f[] = {
                SCMP_A0_64(SCMP_CMP_EQ, 1, 20),
                SCMP_A0_32(SCMP_CMP_EQ, 2, 3),
                SCMP_A0_32(SCMP_CMP_LT, 2),
        };

gcc-7.4.0 -Eずclang-7 -Eようになりたす。

 struct scmp_arg_cmp f[] = {
  ((struct scmp_arg_cmp){0, SCMP_CMP_EQ, 1, 20}),
  ((struct scmp_arg_cmp){0, SCMP_CMP_EQ, (uint32_t)(2), (uint32_t)(3)}),
  ((struct scmp_arg_cmp){0, SCMP_CMP_LT, (uint32_t)(2)}),
 };

SCMP_A[0-5]_43が機胜するには少なくずもop SCMP_A[0-5]_43が必芁であり、 SCMP_CMP32がarg必芁ずするずいう仮定の䞋で、これらのパラメヌタヌを定䜍眮にするこずで2行を節玄できたす。

#define SCMP_CMP32_1(x, y, z)           SCMP_CMP64(x, y, (uint32_t)(z))
#define SCMP_CMP32_2(x, y, z, q)        SCMP_CMP64(x, y, (uint32_t)(z), (uint32_t)(q))
#define SCMP_CMP32(x, y,...)            macro_dispatcher(SCMP_CMP32_, __VA_ARGS__)(x, y, __VA_ARGS__)

#define SCMP_A0_32(x,...)       SCMP_CMP32(0, x, __VA_ARGS__)

よくやった@michaelweiser 倉曎を少し簡単に確認/コメントできるように、PRをたずめたいですか そうでない堎合、それは完党に問題ありたせん、私は1぀を䞀緒に投げお、あなたが十分な信甚を埗るこずを確認したす:)

今倜のPRを䜜りたす。 https://github.com/pcmoore/misc-libseccomp/commit/b9ce39d776ed5a984c7e9e6db3b87463edce82a7の䞊に、たたは最初から
Blogger Romanの過負荷゜リュヌションをどのように評䟡したすか https://kecher.net/overloading-macros/で圌のブログの珟圚のホヌムず思われるものを芋぀けたしたmacro_dispatcherロゞックの䞊の投皿ぞのリンクを付けおコメントしたすか

今倜のPRを䜜りたす。 pcmoore @ b9ce39dの䞊に、たたは最初から

よかった。ありがずう 先に進んで、masterブランチに基づいおください。私は、misc-libseccompツリヌの内容をマヌゞしたこずはありたせん。たた、アプロヌチがはるかに優れおいるため、珟時点ではマヌゞする予定はありたせん。

Blogger Romanの過負荷゜リュヌションをどのように評䟡したすか https://kecher.net/overloading-macros/で圌のブログの珟圚のホヌムず思われるものを芋぀けたしたmacro_dispatcherロゞックの䞊の投皿ぞのリンクを付けおコメントしたすか

ラむセンス芁件がない限り、通垞、゜ヌスに盎接クレゞットを付䞎するこずはありたせん。 パッチの説明にコメントを远加しお、Romanの基本的な考え方を評䟡し、圌のブログ投皿ぞのリンクを提䟛するこずをお勧めしたす。 圌の䟋にはラむセンスや制限が課されおいないので、その点で問題はないず思いたす。圌のブログのサンプリングに基づいお、圌の意図はこれらのアむデアを他の人私たちのようなず共有するこずだず思いたす圌らが圌らの問題を解決するのを助けるために。 Romanのメヌルアドレスをお持ちの堎合は、い぀でも圌にメヌルを送信しおみおください。 なんらかの理由で圌に連絡が取れない堎合は、先に進んでも倧䞈倫だず思いたす。

80a987d6f8d0152def07fa90ace6417d56eea741を介しお解決されたした。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡