第3章 外部のカーネルパラメーターに対する重要な変更

本章では、システム管理者向けに、Red Hat Enterprise Linux 7.7 に同梱されるカーネルの重要な変更点の概要を説明します。変更には、proc エントリー、sysctl および sysfs のデフォルト値、boot パラメーター、カーネル設定オプションの追加や更新、注目すべき動作の変更などが含まれます。

新しいカーネルパラメーター

usbcore.quirks = [USB]

このパラメーターでは、同梱の usb コアリクの一覧を拡張するための問い合わせエントリーの一覧を提供します。

エントリーはコンマで区切られます。各エントリーの形式は VendorID:ProductID:Flags です。

ID は 4 桁の 16 進番号で 、フラグ は文字セットです。各文字は、組み込みの quirk を変更します。クレデンシャルが設定されると、明確で消去された場合は設定を行います。文字には、以下の意味があります。

  • A = USB_QUIRK_STRING_FETCH_255 (文字列記述子は 255 バイトの読み取りを使用してフェッチできない)
  • B = USB_QUIRK_RESET_RESUME (device cannot resume correctly so reset it instead);
  • C = USB_QUIRK_NO_SET_INTF (device cannot handle Set-Interface requests);
  • D = USB_QUIRK_CONFIG_INTF_STRINGS (device cannot handle its Configuration or Interface strings);
  • e = USB_QUIRK_RESET (device cannot be reset(例: morph デバイス)はリセットできません)。
  • F = USB_QUIRK_HONOR_BNUMINTERFACES (デバイスには bNumInterfaces 数よりも多くのインターフェース記述があり、これらのインターフェースとの通信は処理できません)。
  • G = USB_QUIRK_DELAY_INIT (デバイス記述子の読み取り後にデバイスの初期化中に一時停止が必要)。
  • H = USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL (高速度およびスーパー速度割り込みエンドポイントの場合、USB 2.0 および USB 3.0 仕様では、マイクロフレームの間隔(1 microframe = 125 マイクロ秒)が interval = 2 ^(bInterval-1)として計算する必要があります。この必要のあるデバイスは、計算で使用されるexponent 変数の代わりに、この計算の結果として bInterval を報告します。
  • I = USB_QUIRK_DEVICE_QUALIFIER (デバイスは device_qualifier 記述子要求を処理できません)。
  • J = USB_QUIRK_IGNORE_REMOTE_WAKEUP (デバイス は誤ったウェイクアップを生成し、リモートウェイク機能を無視します)。
  • K = USB_QUIRK_NO_LPM (device cannot handle Link Power Management);
  • L = USB_QUIRK_LINEAR_FRAME_INTR_BINTERVAL (デバイスにより、USB 2.0 の計算ではなくリニアフレームとして bInterval がレポートされる)
  • m = USB_QUIRK_DISCONNECT_SUSPEND (Device should be disconnected before suspend to prevent wrong wakeup);
  • N = USB_QUIRK_DELAY_CTRL_MSG (デバイスには制御メッセージごとに一時停止が必要)

    エントリーの例:

    quirks=0781:5580:bk,0a5c:5834:gij
ppc_tm = [PPC]

ハードウェアトランザクションメモリーを無効にします。

Format: {"off"}

cgroup.memory = [KNL]

cgroup メモリーコントローラーにオプションを渡します。

形式は、<文字列> です。

nokmem gitops-gitopsこのオプションを使用すると、カーネルメモリーのアカウンティングが無効になります。

mds = [X86,INTEL]

マイクロアーキテクチャーデータサンプリング(MDS)脆弱性の軽減策を制御します。

特定の CPU は、特定の条件下で情報を開示ガジェットに転送できる CPU 内部バッファーに対する不正使用に対して脆弱です。

脆弱なプロセッサーでは、攻撃者が直接アクセス権を持たないデータにアクセスするために、キャッシュ側のチャネル攻撃で、予測的に転送されるデータを利用できます。

オプションは次のとおりです。

  • full - 脆弱な CPU で MDS 軽減策を有効にします。
  • full,nosmt - 脆弱な CPU で MDS 軽減策を有効にし、同時マルチスレッド(SMT)を無効にします。
  • off - MDS の軽減策を無条件で無効にします。

    このオプションを指定しない場合は、mds=full と同じです。

mitigations = [X86,PPC,S390]

CPU 脆弱性に対するオプションの軽減策を制御します。これは、既存のアーキテクチャー固有のオプションの集約となる、一連の、アーキテクチャーに依存しないオプションです。

オプションは次のとおりです。

  • off - オプションの CPU 軽減策をすべて無効にします。これによりシステムパフォーマンスが向上しますが、ユーザーを複数の CPU の脆弱性にさらす可能性もあります。

    以下に相当します。

    • nopti [X86,PPC]
    • nospectre_v1 [PPC]
    • nobp=0 [S390]
    • nospectre_v2 [X86,PPC,S390]
    • spec_store_bypass_disable=off [X86,PPC]
    • l1tf=off [X86]
    • mds=off [X86]
  • auto (デフォルト)- すべての CPU 脆弱性を軽減しますが、脆弱な場合でも SMT(Simultaneous multithreading)を有効にしたままにします。これは、カーネルのアップグレードで SMT が自動的に無効化されないようにしたいユーザーや、SMT ベースの攻撃を他の方法で回避できるユーザーを対象にしています。

    以下に相当します。

    • (デフォルトの動作)
  • auto,nosmt - すべての CPU 脆弱性を軽減し、必要に応じて SMT (Simultaneous multithreading) を無効にします。これは、SMT が失われることを意味する場合でも、常に完全な軽減を求めるユーザーを対象としています。

    以下に相当します。

    • l1tf=flush,nosmt [X86]
    • mds=full,nosmt [X86]
watchdog_thresh = [KNL]

ハードロックアップ検出の停止期間のしきい値を秒単位で設定します。

ソフトロックアップ検出のしきい値は、値を 2 倍に設定します。

0 を値として指定すると、両方のロックアップ検出が無効になります。デフォルトは 10 秒です。

novmcoredd [KNL,KDUMP]

デバイスダンプを無効にします。デバイスダンプを使用すると、ドライバーはダンプデータを vmcore に追加できます。これにより、ドライバー指定のデバッグ情報を収集できます。

ドライバーは制限なしにデータを追加でき、このデータはメモリーに保存されるため、メモリーが大きくなる可能性があります。

デバイスダンプを無効にするとメモリーを保存することができますが、ドライバーのデバッグデータは利用できなくなります。

このパラメーターは、CONFIG_PROC_VMCORE_DEVICE_DUMP が設定されている場合のみ利用できます。

更新されたカーネルパラメーター

resource_alignment

メモリーリソースを再割り当てする調整およびデバイスを指定します。

書式は以下のようになります。

  • [<order of align>@][<domain>:]<bus>:<slot>.<func>[; …​]
  • [<order of align>@]pci:<vendor>:<device>\[:<subvendor>:<subdevice>][; …​]

&lt ;order of align> が 指定されていない場合、PAGE_SIZE が調整として使用されます。リソースウィンドウを拡張する必要がある場合は、PCI-PCI ブリッジを指定できます。

irqaffinity = [SMP]

デフォルトの irq アフィニティーマスクを設定します。

書式は以下のようになります。

  • <CPU number>,…​,<cpu number>
  • <cpu number>-<cpu number>
  • ドライバー(正の範囲は昇順である必要があります)
  • mixture &lt ;cpu number>,…​,<cpu number>-<cpu number>

    ドライバーは、すべて CPU0 に配置する代わりに、デフォルトの割り込み割り当てにドライバーのアフィニティーマスクを使用します。

オプションは次のとおりです。

  • auto (デフォルト) - すべての CPU 脆弱性を軽減しますが、脆弱な場合でも SMT (Simultaneous multithreading) を有効にしたままにしておきます。これは、カーネルのアップグレードで SMT が自動的に無効化されないようにしたいユーザーや、SMT ベースの攻撃を他の方法で回避できるユーザーを対象にしています。

    以下と同等です(デフォルトの動作)。

  • auto,nosmt - すべての CPU 脆弱性を軽減し、必要に応じて SMT (Simultaneous multithreading) を無効にします。これは、SMT が失われることを意味する場合でも、常に完全な軽減を求めるユーザーを対象としています。

    以下に相当します。

    • l1tf=flush,nosmt [X86]
    • mds=full,nosmt [X86]

新しい /proc/sys/net/core パラメーター

bpf_jit_kallsyms

Time コンパイラーの Berkeley Packet Filter Just を有効にすると、コンパイルされたイメージはカーネルに不明なアドレスになります。これは、トレースまたは /proc/kallsyms ファイルに表示されないことを意味します。これにより、これらのアドレスのエクスポートが可能になります。これはデバッグ/トレースに使用できます。bpf_jit_harden パラメーターを有効にすると、この機能は無効になります。

以下の値が使用できます。

0: Just in Time(JIT) kallsyms export(デフォルト値)を無効にします。

1 - 特権ユーザーの Just in Time(JIT) kallsyms エクスポートのみを有効にします。

更新された /proc/sys/fs パラメーター

dentry-state

dentries は動的に割り当てられ、割り当て解除されます。

linux/include/linux/dcache.h から:

struct dentry_stat_t dentry_stat {
        int nr_dentry;
        int nr_unused;
        int age_limit;         (age in seconds)
        int want_pages;        (pages requested by system)
        int nr_negative;       (# of unused negative dentries)
        int dummy;             (Reserved for future use)
};

nr_dentry 番号は、割り当てられた dentries(active + unused)の合計数を表示します。

nr_unused 番号には、アクティブに使用されていない dentries の数が表示されますが、今後再利用できるように、最も最近使用された(LRU)一覧に保存されます。

age_limit 数は、メモリーが短時間の場合に dcache エントリーを回収できる期間(秒単位)で、shrink_dcache_pages() 関数が呼び出され、dcache がまだプルーニングされません。

nr_negative 番号は、ファイルにマッピングされない負の dentries の未使用の dentries の数を示します。代わりに、ユーザーが提供する存在しないファイルの拒否時間を短縮するのに役立ちます。