Skip to content

Commit

Permalink
[jak2] fix use-after-free bug in nav enemies (#3240)
Browse files Browse the repository at this point in the history
Fixes #3153
  • Loading branch information
ManDude authored Dec 3, 2023
1 parent 974f593 commit be6a6de
Show file tree
Hide file tree
Showing 13 changed files with 100 additions and 60 deletions.
8 changes: 5 additions & 3 deletions goal_src/jak2/engine/nav/nav-enemy.gc
Original file line number Diff line number Diff line change
Expand Up @@ -2598,9 +2598,11 @@ This commonly includes things such as:
(t9-0)
)
)
(let ((v1-4 (-> self nav)))
(logclear! (-> v1-4 shape nav-flags) (nav-flags has-extra-sphere))
)
;; og:preserve-this fix potential use-after-free bug
(if (-> self nav)
(let ((v1-4 (-> self nav)))
(logclear! (-> v1-4 shape nav-flags) (nav-flags has-extra-sphere))
))
0
)
:code (behavior ()
Expand Down
8 changes: 5 additions & 3 deletions goal_src/jak2/engine/target/mech/grunt-mech.gc
Original file line number Diff line number Diff line change
Expand Up @@ -683,9 +683,11 @@
(set! (-> v1-1 prim-core collide-as) (-> self root backup-collide-as))
(set! (-> v1-1 prim-core collide-with) (-> self root backup-collide-with))
)
(let ((v1-2 (-> self nav)))
(logclear! (-> v1-2 shape nav-flags) (nav-flags has-extra-sphere))
)
;; og:preserve-this fix potential use-after-free bug
(if (-> self nav)
(let ((v1-2 (-> self nav)))
(logclear! (-> v1-2 shape nav-flags) (nav-flags has-extra-sphere))
))
0
(logior! (-> self root nav-flags) (nav-flags has-root-sphere))
)
Expand Down
24 changes: 15 additions & 9 deletions goal_src/jak2/levels/castle/boss/castle-baron.gc
Original file line number Diff line number Diff line change
Expand Up @@ -2218,14 +2218,18 @@ For example for an elevator pre-compute the distance between the first and last
)
:exit (behavior ()
(set! (-> self next-shooting-frame) 200)
(let ((v1-1 (-> self nav)))
(set! (-> v1-1 target-speed) 122880.0)
)
;; og:preserve-this fix potential use-after-free bug
(if (-> self nav)
(let ((v1-1 (-> self nav)))
(set! (-> v1-1 target-speed) 122880.0)
))
0
(set! (-> *krew-boss-nav-enemy-info* run-travel-speed) 122880.0)
(let ((v1-5 (-> self nav)))
(set! (-> v1-5 sphere-mask) (the-as uint #x800f8))
)
;; og:preserve-this fix potential use-after-free bug
(if (-> self nav)
(let ((v1-5 (-> self nav)))
(set! (-> v1-5 sphere-mask) (the-as uint #x800f8))
))
0
(if (logtest? (enemy-flag enemy-flag43) (-> self enemy-flags))
(logior! (-> self nav flags) (nav-control-flag update-heading-from-facing))
Expand Down Expand Up @@ -2997,9 +3001,11 @@ For example for an elevator pre-compute the distance between the first and last
(t9-0)
)
)
(let ((v1-4 (-> self nav)))
(set! (-> v1-4 sphere-mask) (the-as uint #x800f8))
)
;; og:preserve-this fix potential use-after-free bug
(if (-> self nav)
(let ((v1-4 (-> self nav)))
(set! (-> v1-4 sphere-mask) (the-as uint #x800f8))
))
0
)
:trans (behavior ()
Expand Down
8 changes: 5 additions & 3 deletions goal_src/jak2/levels/castle/roboguard-level.gc
Original file line number Diff line number Diff line change
Expand Up @@ -368,9 +368,11 @@
)
:exit (behavior ()
(logclear! (-> self nav flags) (nav-control-flag output-sphere-hash))
(let ((v1-2 (-> self nav)))
(logclear! (-> v1-2 shape nav-flags) (nav-flags has-extra-sphere))
)
;; og:preserve-this fix potential use-after-free bug
(if (-> self nav)
(let ((v1-2 (-> self nav)))
(logclear! (-> v1-2 shape nav-flags) (nav-flags has-extra-sphere))
))
0
)
:code (behavior ()
Expand Down
8 changes: 5 additions & 3 deletions goal_src/jak2/levels/city/kiddogescort/crocesc-states.gc
Original file line number Diff line number Diff line change
Expand Up @@ -601,9 +601,11 @@
(set! (-> self vehicle-handle) (the-as handle #f))
(logclear! (-> self bot-flags) (bot-flags bf16))
(logclear! (-> self focus-status) (focus-status pilot-riding pilot))
(let ((v1-5 (-> self nav)))
(logclear! (-> v1-5 shape nav-flags) (nav-flags has-extra-sphere))
)
;; og:preserve-this fix potential use-after-free bug
(if (-> self nav)
(let ((v1-5 (-> self nav)))
(logclear! (-> v1-5 shape nav-flags) (nav-flags has-extra-sphere))
))
0
(logclear! (-> self focus-status) (focus-status disable))
(let ((v1-10 (-> self enemy-flags)))
Expand Down
8 changes: 5 additions & 3 deletions goal_src/jak2/levels/city/kiddogescort/kidesc-states.gc
Original file line number Diff line number Diff line change
Expand Up @@ -551,9 +551,11 @@
(set! (-> self vehicle-handle) (the-as handle #f))
(logclear! (-> self bot-flags) (bot-flags bf16))
(logclear! (-> self focus-status) (focus-status pilot-riding pilot))
(let ((v1-11 (-> self nav)))
(logclear! (-> v1-11 shape nav-flags) (nav-flags has-extra-sphere))
)
;; og:preserve-this fix potential use-after-free bug
(if (-> self nav)
(let ((v1-11 (-> self nav)))
(logclear! (-> v1-11 shape nav-flags) (nav-flags has-extra-sphere))
))
0
(logclear! (-> self focus-status) (focus-status disable))
(let ((v1-16 (-> self enemy-flags)))
Expand Down
24 changes: 15 additions & 9 deletions goal_src/jak2/levels/city/traffic/citizen/civilian.gc
Original file line number Diff line number Diff line change
Expand Up @@ -1092,9 +1092,11 @@
(set! (-> v1-5 prim-core collide-with) (-> self root backup-collide-with))
)
(logior! (-> self root nav-flags) (nav-flags has-root-sphere))
(let ((v1-9 (-> self nav)))
(set! (-> v1-9 sphere-mask) (the-as uint #x800fe))
)
;; og:preserve-this fix potential use-after-free bug
(if (-> self nav)
(let ((v1-9 (-> self nav)))
(set! (-> v1-9 sphere-mask) (the-as uint #x800fe))
))
0
)
:trans (behavior ()
Expand Down Expand Up @@ -1170,9 +1172,11 @@
(set! (-> v1-5 prim-core collide-with) (-> self root backup-collide-with))
)
(logior! (-> self root nav-flags) (nav-flags has-root-sphere))
(let ((v1-9 (-> self nav)))
(set! (-> v1-9 sphere-mask) (the-as uint #x800fe))
)
;; og:preserve-this fix potential use-after-free bug
(if (-> self nav)
(let ((v1-9 (-> self nav)))
(set! (-> v1-9 sphere-mask) (the-as uint #x800fe))
))
0
)
:trans (behavior ()
Expand Down Expand Up @@ -1594,9 +1598,11 @@
0
)
:exit (behavior ()
(let ((v1-0 (-> self nav)))
(set! (-> v1-0 sphere-mask) (the-as uint #x800fe))
)
;; og:preserve-this fix potential use-after-free bug
(if (-> self nav)
(let ((v1-0 (-> self nav)))
(set! (-> v1-0 sphere-mask) (the-as uint #x800fe))
))
0
(logclear! (-> self flags) (citizen-flag persistent))
)
Expand Down
16 changes: 10 additions & 6 deletions goal_src/jak2/levels/common/enemy/fodder/fodder.gc
Original file line number Diff line number Diff line change
Expand Up @@ -580,13 +580,17 @@
0
)
:exit (behavior ()
(let ((v1-0 (-> self nav)))
(set! (-> v1-0 target-speed) (-> self enemy-info run-travel-speed))
)
;; og:preserve-this fix potential use-after-free bug
(if (-> self nav)
(let ((v1-0 (-> self nav)))
(set! (-> v1-0 target-speed) (-> self enemy-info run-travel-speed))
))
0
(let ((v1-2 (-> self nav)))
(set! (-> v1-2 turning-acceleration) (-> self enemy-info run-turning-acceleration))
)
;; og:preserve-this fix potential use-after-free bug
(if (-> self nav)
(let ((v1-2 (-> self nav)))
(set! (-> v1-2 turning-acceleration) (-> self enemy-info run-turning-acceleration))
))
0
(fodder-method-181 self #f)
(if (logtest? (-> self enemy-flags) (enemy-flag check-water))
Expand Down
24 changes: 15 additions & 9 deletions goal_src/jak2/levels/common/enemy/metalmonk.gc
Original file line number Diff line number Diff line change
Expand Up @@ -553,13 +553,17 @@
(t9-0)
)
)
(let ((v1-4 (-> self nav)))
(set! (-> v1-4 max-rotation-rate) (-> self enemy-info maximum-rotation-rate))
)
;; og:preserve-this fix potential use-after-free bug
(if (-> self nav)
(let ((v1-4 (-> self nav)))
(set! (-> v1-4 max-rotation-rate) (-> self enemy-info maximum-rotation-rate))
))
0
(let ((v1-6 (-> self nav)))
(set! (-> v1-6 turning-acceleration) (-> self enemy-info run-turning-acceleration))
)
;; og:preserve-this fix potential use-after-free bug
(if (-> self nav)
(let ((v1-6 (-> self nav)))
(set! (-> v1-6 turning-acceleration) (-> self enemy-info run-turning-acceleration))
))
0
)
:code (behavior ()
Expand Down Expand Up @@ -725,9 +729,11 @@
(logclear! (-> self enemy-flags) (enemy-flag actor-pause-backup))
(metalmonk-method-180 self #f)
(nav-enemy-method-168 self)
(let ((v1-6 (-> self nav)))
(set! (-> v1-6 target-speed) (-> self enemy-info run-travel-speed))
)
;; og:preserve-this fix potential use-after-free bug
(if (-> self nav)
(let ((v1-6 (-> self nav)))
(set! (-> v1-6 target-speed) (-> self enemy-info run-travel-speed))
))
0
(if (logtest? (-> self enemy-flags) (enemy-flag check-water))
(logior! (-> self focus-status) (focus-status dangerous))
Expand Down
8 changes: 5 additions & 3 deletions goal_src/jak2/levels/common/enemy/spyder.gc
Original file line number Diff line number Diff line change
Expand Up @@ -1008,9 +1008,11 @@
)
:exit (behavior ()
(logclear! (-> self enemy-flags) (enemy-flag actor-pause-backup))
(let ((v1-2 (-> self nav)))
(set! (-> v1-2 max-rotation-rate) (-> *spyder-nav-enemy-info* maximum-rotation-rate))
)
;; og:preserve-this fix potential use-after-free bug
(if (-> self nav)
(let ((v1-2 (-> self nav)))
(set! (-> v1-2 max-rotation-rate) (-> *spyder-nav-enemy-info* maximum-rotation-rate))
))
0
)
:trans (behavior ()
Expand Down
8 changes: 5 additions & 3 deletions goal_src/jak2/levels/common/entities/spydroid.gc
Original file line number Diff line number Diff line change
Expand Up @@ -914,9 +914,11 @@
:exit (behavior ()
(logclear! (-> self enemy-flags) (enemy-flag actor-pause-backup))
(nav-enemy-method-168 self)
(let ((v1-4 (-> self nav)))
(set! (-> v1-4 target-speed) (-> self enemy-info run-travel-speed))
)
;; og:preserve-this fix potential use-after-free bug
(if (-> self nav)
(let ((v1-4 (-> self nav)))
(set! (-> v1-4 target-speed) (-> self enemy-info run-travel-speed))
))
0
(if (logtest? (-> self enemy-flags) (enemy-flag check-water))
(logior! (-> self focus-status) (focus-status dangerous))
Expand Down
8 changes: 5 additions & 3 deletions goal_src/jak2/levels/mountain/rhino.gc
Original file line number Diff line number Diff line change
Expand Up @@ -1282,9 +1282,11 @@
(set! (-> v1-1 speed) 0.0)
)
0
(let ((v1-3 (-> self nav)))
(set! (-> v1-3 target-speed) (-> self enemy-info walk-travel-speed))
)
;; og:preserve-this fix potential use-after-free bug
(if (-> self nav)
(let ((v1-3 (-> self nav)))
(set! (-> v1-3 target-speed) (-> self enemy-info walk-travel-speed))
))
0
(set! (-> self in-stop-run) #f)
)
Expand Down
8 changes: 5 additions & 3 deletions goal_src/jak2/levels/nest/mantis.gc
Original file line number Diff line number Diff line change
Expand Up @@ -748,9 +748,11 @@
)
:exit (behavior ()
(change-to (nav-mesh-from-res-tag (-> self entity) 'nav-mesh-actor 0) self)
(let ((v1-2 (-> self nav)))
(set! (-> v1-2 max-rotation-rate) (-> self enemy-info maximum-rotation-rate))
)
;; og:preserve-this fix potential use-after-free bug
(if (-> self nav)
(let ((v1-2 (-> self nav)))
(set! (-> v1-2 max-rotation-rate) (-> self enemy-info maximum-rotation-rate))
))
0
)
:trans (behavior ()
Expand Down

0 comments on commit be6a6de

Please sign in to comment.