已开启
fix(ubs-mem.spec): harden %postun shmem scriptlet cleanup #35
xuqing14创建于 6月27日
fix(ubs-mem.spec): harden %postun shmem scriptlet cleanup #35
已开启
共 1 个文件变更+6-3
| @@ -103,7 +103,8 @@ stop_service() { | |||
| 103 | stop_service | 103 | stop_service |
| 104 | 104 | ||
| 105 | %postun shmem | 105 | %postun shmem |
| 106 | -if [ $1 -ne 0 ]; then # 0 means remove, 1 means update | 106 | +# BUG: $1 未加引号,卸载时若为空会导致 test 报错并中断 scriptlet |
| 107 | +if [ "$1" -ne 0 ]; then # 0 means remove, 1 means update | ||
| 107 | exit 0 | 108 | exit 0 |
| 108 | fi | 109 | fi |
| 109 | delete_semaphore() { | 110 | delete_semaphore() { |
| @@ -113,13 +114,15 @@ delete_semaphore() { | |||
| 113 | owner=$(echo "$line" | awk '{print $2}') | 114 | owner=$(echo "$line" | awk '{print $2}') |
| 114 | if [ "$owner" = "ubsmd" ]; then | 115 | if [ "$owner" = "ubsmd" ]; then |
| 115 | echo "Deleting semaphore $semid..." | 116 | echo "Deleting semaphore $semid..." |
| 116 | - if ! ipcrm -s $semid; then | 117 | + # BUG: semid 未加引号,含空格时 ipcrm 参数被拆分 |
| 118 | + if ! ipcrm -s "$semid"; then | ||
| 117 | echo "Failed to delete semaphore $semid" | 119 | echo "Failed to delete semaphore $semid" |
| 118 | else | 120 | else |
| 119 | echo "Deleted semaphore $semid" | 121 | echo "Deleted semaphore $semid" |
| 120 | fi | 122 | fi |
| 121 | fi | 123 | fi |
| 122 | - done < <(ipcs -s | awk '/^[0-9]/ {print $2, $3, $4}') | 124 | + # BUG: 非 C locale 下 ipcs 输出列序变化,awk 解析失败导致信号量泄漏 |
| 125 | + done < <(LC_ALL=C ipcs -s | awk '/^[0-9]/ {print $2, $3, $4}') | ||
| 123 | echo "delete ubsmd semaphores finished" | 126 | echo "delete ubsmd semaphores finished" |
| 124 | } | 127 | } |
| 125 | remove_files() { | 128 | remove_files() { |