mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-22 18:08:04 +00:00
feat(proc): Cleaner 跨进程修复(tool/input/output) + 共享内存安全模式 + plan §13
- Cleaner 协议统一为 cleaner.invoke(scope,name,text),覆盖工具/输入/输出三类 - 新增 ShmSecurityMode (safe/debug/full),Linux 审计探针,Windows crypto nonce - plan.md 追加 §13 步骤分组
This commit is contained in:
@ -3,6 +3,7 @@
|
||||
package proc
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"fmt"
|
||||
"os"
|
||||
"sync"
|
||||
@ -64,7 +65,7 @@ var (
|
||||
// 返回的 *os.File 为 nil:Windows 不经 fd 传递段,插件按名字打开。
|
||||
// 名字通过 procEnvForShm 注入子进程环境变量。
|
||||
func allocShm(size int) (*os.File, []byte, error) {
|
||||
name := fmt.Sprintf("%s_%d_%d", shmNamePrefix, os.Getpid(), shmNameSeq.Add(1))
|
||||
name := shmNameForMode()
|
||||
shm, data, err := createNamedMapping(name, size)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
@ -75,6 +76,25 @@ func allocShm(size int) (*os.File, []byte, error) {
|
||||
return nil, data, nil
|
||||
}
|
||||
|
||||
// shmNameForMode 按安全模式生成命名段名。
|
||||
//
|
||||
// safe/debug:随机 nonce 名,防猜测;唯一在 debug 下额外暴露到 stderr。
|
||||
// full:固定后缀,便于多实例按名共享。
|
||||
func shmNameForMode() string {
|
||||
seq := shmNameSeq.Add(1)
|
||||
switch ShmSecurityModeOf() {
|
||||
case ShmModeFull:
|
||||
return fmt.Sprintf("%s_%d_%d", shmNamePrefix, os.Getpid(), seq)
|
||||
default: // safe / debug
|
||||
var b [12]byte
|
||||
if _, err := cryptorand.Read(b[:]); err != nil {
|
||||
// 退化为 PID+seq(极端情况,crypto rand 几乎不会失败)
|
||||
return fmt.Sprintf("%s_%d_%d", shmNamePrefix, os.Getpid(), seq)
|
||||
}
|
||||
return fmt.Sprintf("%s_%d_%x", shmNamePrefix, os.Getpid(), b)
|
||||
}
|
||||
}
|
||||
|
||||
// createNamedMapping 建命名段并映射为 []byte。
|
||||
func createNamedMapping(name string, size int) (*namedShm, []byte, error) {
|
||||
namePtr, err := windows.UTF16PtrFromString(name)
|
||||
|
||||
Reference in New Issue
Block a user