fkanehiro / hrpsys-base

Basic RT components and utilities to control robots using OpenRTM
Other
40 stars 87 forks source link

[SoftErrorLimiter/robot.cpp] check jointId >=0 in setServoErrorLimit #1315

Closed kindsenior closed 2 years ago

kindsenior commented 2 years ago

setServoErrorLimit関数においてi_jnameから取得した関節のjointIdが設定されているかどうかのチェックを追加しました

hcf.el_svc.setServoErrorLimit()の引数にjointIdが設定されていない関節名を指定すると, このチェックを行わない場合はaddress-sanitizer(-fsanitize=address)にてheap-buffer-overflowが必ず検出されるのに対して, このPRによりaddress-sanitizerをパスできることを確認しました

Naoki-Hiraoka commented 2 years ago

@kindsenior https://github.com/kindsenior/hrpsys-base/pull/20 で、RobotHardware及びSequencePlayerについてもjointIdをチェックするようにしました。

特にRobotHardwareの方は、https://github.com/fkanehiro/hrpsys-base/blob/798b4c9904c273d0217a434bec35c92207b1274d/lib/io/iob.h#L54jointId=-1JID_ALL を示す仕様になっているため、大変危険でした。

address-sanitizerのチェックはしていません。

kindsenior commented 2 years ago

address-sanitizerのチェックはしていません。

SequencePlayerのsetJointAngle関数においてadress-sanitizerのによる同様の動作確認を行いました