beyond the stable/12

FreeBSD/mipsは13ではclangになり動かなくなったので12が最終リリースです。プロジェクト管理がいい加減なFreeBSDらしいですね。その12も今年いっぱいでEOLです。

自分のローカルのブランチには本家の修正を適時pullしています。

自分がいじったものを確認してみます。

https://github.com/ZRouter/freebsd-src/tree/zrouter_yamori813

ZRouterでforkしてレポジトリを作ってあるので、まずブラウザでZRouterのgithubのstable/12をSync forkしておきます。

ローカルのブランチで以下を実行します。

```
% git fetch origin stable/12
% git diff --name-status origin/stable/12 zrouter_yamori813
M       contrib/gcc/config/mips/mips-dsp.md
M       contrib/gcc/config/mips/mips.h
M       contrib/gcc/config/mips/mips.md
M       contrib/gcc/config/mips/mips.opt
M       sys/conf/files.mips
A       sys/conf/ldscript.mips.bin
M       sys/dev/cfi/cfi_core.c
M       sys/dev/etherswitch/arswitch/arswitch.c
M       sys/dev/etherswitch/etherswitch.h
M       sys/dev/etherswitch/infineon/adm6996fc.c
M       sys/dev/etherswitch/mtkswitch/mtkswitch.c
M       sys/dev/etherswitch/mtkswitch/mtkswitch_mt7620.c
M       sys/dev/etherswitch/mtkswitch/mtkswitch_mt7620.h
M       sys/dev/etherswitch/mtkswitch/mtkswitch_rt3050.c
M       sys/dev/etherswitch/mtkswitch/mtkswitch_rt3050.h
M       sys/dev/etherswitch/mtkswitch/mtkswitchvar.h
A       sys/dev/etherswitch/robosw/bcm53115.c
A       sys/dev/etherswitch/robosw/bcm5325.c
A       sys/dev/etherswitch/robosw/bcm5358.c
A       sys/dev/etherswitch/robosw/robosw.c
A       sys/dev/etherswitch/robosw/robosw_ddb.c
A       sys/dev/etherswitch/robosw/robosw_hal.c
A       sys/dev/etherswitch/robosw/robosw_hal.h
A       sys/dev/etherswitch/robosw/robosw_ids.h
A       sys/dev/etherswitch/robosw/robosw_reg.h
A       sys/dev/etherswitch/robosw/robosw_var.h
M       sys/dev/flash/mx25l.c
M       sys/dev/gpio/gpiospi.c
M       sys/dev/iicbus/rtc8583.c
M       sys/dev/rt/if_rt.c
A       sys/dts/mips/zbsd-mt7620a.dtsi
A       sys/dts/mips/zbsd-rt3050.dtsi
A       sys/dts/mips/zbsd-rt3883.dtsi
M       sys/mips/atheros/ar531x/ar5315_machdep.c
M       sys/mips/atheros/ar71xx_gpio.c
M       sys/mips/atheros/ar71xx_machdep.c
A       sys/mips/atheros/ar71xx_pcm.c
A       sys/mips/atheros/ar71xx_pcm_pll.c
A       sys/mips/atheros/ar71xx_pcm_pll.h
A       sys/mips/atheros/ar71xx_pcmvar.h
M       sys/mips/atheros/ar71xx_spi.c
M       sys/mips/atheros/ar71xxreg.h
M       sys/mips/atheros/ar933xreg.h
M       sys/mips/atheros/ar934xreg.h
M       sys/mips/atheros/files.ar71xx
A       sys/mips/broadcom/bgmac/bcm_dma.c
A       sys/mips/broadcom/bgmac/bcm_dma.h
A       sys/mips/broadcom/bgmac/bcm_dma_desc.h
A       sys/mips/broadcom/bgmac/bcm_dma_ops.c
A       sys/mips/broadcom/bgmac/bcm_dma_ops.h
A       sys/mips/broadcom/bgmac/bcm_dma_reg.h
A       sys/mips/broadcom/bgmac/bcm_dma_ring.c
A       sys/mips/broadcom/bgmac/bcm_dma_ringvar.h
A       sys/mips/broadcom/bgmac/bcm_dma_rx.c
A       sys/mips/broadcom/bgmac/bcm_dma_tx.c
A       sys/mips/broadcom/bgmac/bgmac.c
A       sys/mips/broadcom/bgmac/bgmac.h
A       sys/mips/broadcom/bgmac/bgmac_ddb.c
A       sys/mips/broadcom/bgmac/bgmac_sysctl.c
A       sys/mips/broadcom/bgmac/bgmac_tx.c
A       sys/mips/broadcom/bgmac/bgmacreg.h
A       sys/mips/broadcom/bgmac/bgmacvar.h
M       sys/mips/broadcom/files.broadcom
M       sys/mips/cavium/octeon_machdep.c
M       sys/mips/include/cpuinfo.h
M       sys/mips/include/cpuregs.h
M       sys/mips/include/frame.h
M       sys/mips/include/md_var.h
M       sys/mips/include/proc.h
M       sys/mips/include/trap.h
M       sys/mips/include/ucontext.h
M       sys/mips/mediatek/files.mediatek
A       sys/mips/mediatek/mtk_gdma.c
A       sys/mips/mediatek/mtk_gdma.h
A       sys/mips/mediatek/mtk_iic.c
A       sys/mips/mediatek/mtk_iic.h
M       sys/mips/mediatek/mtk_machdep.c
M       sys/mips/mediatek/mtk_soc.c
M       sys/mips/mediatek/mtk_soc.h
M       sys/mips/mediatek/mtk_spi_v1.c
A       sys/mips/mediatek/mtk_spi_v3.c
A       sys/mips/mediatek/mtk_spi_v3.h
M       sys/mips/mediatek/mtk_sysctl.h
A       sys/mips/mediatek/mtk_wdog_v1.c
M       sys/mips/mips/cpu.c
M       sys/mips/mips/db_trace.c
M       sys/mips/mips/genassym.c
M       sys/mips/mips/machdep.c
A       sys/mips/mips/mips_dsp.S
M       sys/mips/mips/pm_machdep.c
M       sys/mips/mips/swtch.S
M       sys/mips/mips/trap.c
```

MIPSのSIMDのDSP命令を使えるようにしたのとかデバイスドライバーをいろいろ追加してます。

本家のソースのカーネルはユーザーランドでDSP命令を実行すると、パニックするという最強の脆弱性があります。

これは対応してないFreeBSDにも問題がありますが、古いOSをそのまま動かしてDSP機能をenableにせずにDSP命令を実行すると例外が発生するアーキテクチャをつくったMIPSにも責任があるようなきがします。未定義命令の例外でもよかったのではないでしょうか。

DSPサポートはコンテキストスイッチのコードがまだ作れていないのですが、いずれ作ります。（作りました 2024/3)

broadcomはmizhkaがいじっていたものを取り込んでありますが、まだ使い物になりません。

atherosのpcmドライバーで毎日Jazzsakuraのストリーミングをきいていますが、まったく不安無く動いていて、よく作れたもんだと感心します。今コードを見てもなにやってるかよくわかりません。

mediatekのgpiopps対応など、本家にマージされているものもあります。

制限された使用方法であれば致命的な脆弱性が出てくる事はないと思います。またあまり使われていないFreeBSDの脆弱性を探すほど暇な人はいないと思います。

RalinkとかAtherosのターゲットはハードオフなどで手に入りやすいですし、メモリ32Mでも十分いろいろできます。ターゲットはRalinkやAtherosの最後の頃のSOCを使った製品がお勧めです。

いろいろいじれたのはZRouterがあったおかげです。

mipsではないですが、[esp-targ](https://qiita.com/yamori813/items/0203a6f0d016a68bdfc6)も12で終わりのpccardベースで作り込みました。

まだまだいじっていきます。

ふと思い出したのですが、以前勤めていたY!では6が最終プロダクションサーバでした。