squeezeの2.6.32-48へのアップグレード時の警告対応

■Debianでは早速更新されています。
 2013/02/26現在、Redhatには、まだ修正は公開されていません。

 xen-pcibackenablemsi-dos (81923)
 http://xforce.iss.net/xforce/xfdb/81923

 DSA-2632-1 linux-2.6 -- 特権の昇格/サービス拒否
 http://www.debian.org/security/2013/dsa-2632.ja.html

 CVE-2013-0231
 https://access.redhat.com/security/cve/CVE-2013-0231

■Squeezeでいつものようにアップデートしたら、以下の警告が出た。

$ sudo apt-get update
$ sudo apt-get upgrade
...
linux-base (2.6.32-48squeeze1) を設定しています ...
linux-image-2.6.32-5-amd64 (2.6.32-48squeeze1) を設定しています ...
Running depmod.
Running update-initramfs.
update-initramfs: Generating /boot/initrd.img-2.6.32-5-amd64
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8105e-1.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168e-2.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168e-1.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168d-2.fw for module r8169
W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168d-1.fw for module r8169
Examining /etc/kernel/postinst.d.
...

■RTL-8169のサードパーティ製ドライバの様子。

$ sudo lspci | grep Ether
03:05.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8169 Gigabit Ethernet (rev 10)
03:06.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8169 Gigabit Ethernet (rev 10)
03:08.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5788 Gigabit Ethernet (rev 03)

■下記公式の通り、non-freeの扱いになっている。

 http://packages.debian.org/squeeze/firmware-realtek

■r8169のモジュールは下記にある。

$ sudo find / -type f -name "r8169.ko"
/lib/modules/2.6.32-5-amd64/kernel/drivers/net/r8169.ko

■モジュールは読み込まれている。

$ sudo /sbin/lsmod | grep r81
r8169                  36792  0
mii                     3210  1 r8169

■エラーやドロップ、オーバーロードは無い。

$ sudo  netstat -i | awk '{OFS="\t";print $1,$5,$6,$7,$9,$10,$11}'
カーネルインタフェーステーブル
Iface   RX-ERR  RX-DRP  RX-OVR  TX-ERR  TX-DRP  TX-OVR
bond0   0       0       0       0       0       0
eth0    0       0       0       0       0       0
eth1    0       0       0       0       0       0
eth2    0       0       0       0       0       0
lo      0       0       0       0       0       0

■「sources.list」には「non-free」を読み込む設定があるので、
 最初の警告にあったファイルを含むパッケージを確認して、インストール。

$ grep non-free /etc/apt/sources.list
deb http://ftp.jp.debian.org/debian/ squeeze main non-free

$ sudo apt-file update
$ apt-file search rtl8105e-1.fw
firmware-realtek: /lib/firmware/rtl_nic/rtl8105e-1.fw

$ apt-cache search firmware-realtek
firmware-realtek - Binary firmware for Realtek wired and wireless network adapters

$ dpkg -l | grep ^ii | grep firmware-realtek | wc -l
0

$ sudo apt-get install -y firmware-realtek

$ sudo find /lib/firmware/rtl_nic -type f -print
/lib/firmware/rtl_nic/rtl8168e-3.fw
/lib/firmware/rtl_nic/rtl8168d-2.fw
/lib/firmware/rtl_nic/rtl8168e-2.fw
/lib/firmware/rtl_nic/rtl8105e-1.fw
/lib/firmware/rtl_nic/rtl8168d-1.fw
/lib/firmware/rtl_nic/rtl8168e-1.fw

■initrdをアップデートする。
 「update-initramfs」はバックアップを取らない設定なので、手動でコピー。

$ grep -v "^#\|^\$" /etc/initramfs-tools/update-initramfs.conf
update_initramfs=yes
backup_initramfs=no

$ sudo cp /boot/initrd.img-2.6.32-5-amd64 /boot/initrd.img-2.6.32-5-amd64.bak
$ sudo update-initramfs -u
update-initramfs: Generating /boot/initrd.img-2.6.32-5-amd64

$ ls /boot/initrd.img*
/boot/initrd.img-2.6.32-5-amd64
/boot/initrd.img-2.6.32-5-amd64.bak

■「initrd」のアップデート前後でファームウエアが含まれているかどうかが確認出来る。
 cpioは「-t」オプションで一覧のみとしているが、操作を間違えると困るので、workディレクトリで作業する。

$ uname -a
Linux ibm-amddebian 2.6.32-5-amd64 #1 SMP Fri Feb 15 15:39:52 UTC 2013 x86_64 GNU/Linux

$ lv -s /usr/share/doc/linux-image-2.6.32-5-amd64/changelog.Debian.gz | head -8
linux-2.6 (2.6.32-48squeeze1) stable-security; urgency=high

  * ptrace: Fix race condition allowing kernel stack corruption (CVE-2013-0871)
  * xen: pciback: rate limit error message from pciback_enable_msi()
    (CVE-2013-0231)

 -- dann frazier <dannf@debian.org>  Sun, 24 Feb 2013 14:34:44 -0700

$ mkdir work && cd work
$ pwd | sed s%.*/%%g
work
$ gunzip -c /boot/initrd.img-2.6.32-5-amd64.bak  | cpio -i -t | grep rtl
58747 blocks

$ gunzip -c /boot/initrd.img-2.6.32-5-amd64  | cpio -i -t | grep rtl
lib/firmware/rtl_nic
lib/firmware/rtl_nic/rtl8168d-2.fw
lib/firmware/rtl_nic/rtl8168e-2.fw
lib/firmware/rtl_nic/rtl8105e-1.fw
lib/firmware/rtl_nic/rtl8168d-1.fw
lib/firmware/rtl_nic/rtl8168e-1.fw
53956 blocks

$ cd ../
$ ls -d work/
work/
$ ls -d work/ | xargs rmdir
$ ls -d work/
ls: cannot access work/: そのようなファイルやディレクトリはありません