-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ndn_msgqueue_dispatch: unaligned load #55
Comments
Thank you for your report. I made |
Yes, this would be a good solution. Many C libraries handle arguments like this. |
As of 097f568,
ndn_msgqueue_dispatch
can potentially cause address error exception due to unaligned load when running on MIPS32 architecture.The msgqueue operates on this data structure:
ndn_msgqueue_post
function stores instances ofndn_msg
consecutively in themsg_queue
buffer. Ifparam_length
is not a multiple of 4, the nextndn_msg
struct becomes unaligned.MIPS compiler will generate unaligned load/store instructions for
ndn_msg
structs themselves because of thepack(1)
tag.However, the param struct passed to the callback function would also be unaligned, and it's likely that that struct has not been declared as
pack(1)
. Consequently, the callback function could perform a regular load instruction on an unaligned address, triggering an address error exception.This issue has not caused a crash so far, because every invocation of
ndn_msgqueue_post
in current ndn-lite codebase has been settingparam_length
to zero. Upon this observations, a potential solution to this bug would be removingparam
andparam_length
params.The text was updated successfully, but these errors were encountered: