Skip to content
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

fix hg_proc_save_ptr() error handling and allocation (when using XDR) #779

Merged
merged 1 commit into from
Jan 30, 2025

Conversation

chuckcranor
Copy link
Collaborator

hg_proc_hg_bulk_t() uses hg_proc_save_ptr() to allocate buffer space for encoding/decoding bulk handles, but it does not check the return value of hg_proc_save_ptr(). hg_proc_save_ptr() returns NULL on memory allocation failure. update hg_proc_hg_bulk_t() to check the return value of hg_proc_save_ptr() to see if it is NULL.

Update hg_proc_save_ptr():

When hg_proc_save_ptr() is compiled with !HG_HAS_XDR we should check the return value of hg_proc_set_size() for resize errors and fail if hg_proc_set_size() fails.

When hg_proc_save_ptr() is compiled with HG_HAS_XDR, we should follow the XDR BYTES_PER_XDR_UNIT rounding rules just in case the size is not a multiple of BYTES_PER_XDR_UNIT. If we run out of preallocated space we should fail (since XDR does not grow buffers). Simplify code to use xdr_inline() to allocate memory rather than using xdr_getpos()/xdr_setpos(). Sanity check return value of xdr_inline() to ensure that it is in sync with the initial value of hg_proc->current_buf->buf_ptr.

Copy link
Member

@soumagne soumagne left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the patch, that looks good. I just made some minor fixes to match the formatting.

src/mercury_proc.c Outdated Show resolved Hide resolved
src/mercury_proc.c Outdated Show resolved Hide resolved
src/mercury_proc.c Outdated Show resolved Hide resolved
src/mercury_proc.c Outdated Show resolved Hide resolved
src/mercury_proc_bulk.c Outdated Show resolved Hide resolved
src/mercury_proc_bulk.c Outdated Show resolved Hide resolved
@chuckcranor
Copy link
Collaborator Author

thanks, I rebased the formatting changes in!

@soumagne
Copy link
Member

@chuckcranor could you please amend your commit message to just start the first line with HG proc: thanks!

hg_proc_hg_bulk_t() uses hg_proc_save_ptr() to allocate
buffer space for encoding/decoding bulk handles, but it
does not check the return value of hg_proc_save_ptr().
hg_proc_save_ptr() returns NULL on memory allocation failure.
update hg_proc_hg_bulk_t() to check the return value of
hg_proc_save_ptr() to see if it is NULL.

Update hg_proc_save_ptr():

When hg_proc_save_ptr() is compiled with !HG_HAS_XDR we
should check the return value of hg_proc_set_size() for
resize errors and fail if hg_proc_set_size() fails.

When hg_proc_save_ptr() is compiled with HG_HAS_XDR, we
should follow the XDR BYTES_PER_XDR_UNIT rounding rules
just in case the size is not a multiple of BYTES_PER_XDR_UNIT.
If we run out of preallocated space we should fail (since
XDR does not grow buffers).  Simplify code to use xdr_inline()
to allocate memory rather than using xdr_getpos()/xdr_setpos().
Sanity check return value of xdr_inline() to ensure that
it is in sync with the initial value of hg_proc->current_buf->buf_ptr.

Includes formatting updates from Jerome.
@chuckcranor
Copy link
Collaborator Author

ok, added HG Proc:

@soumagne soumagne merged commit 1fd22d4 into mercury-hpc:master Jan 30, 2025
21 of 22 checks passed
@github-actions github-actions bot locked and limited conversation to collaborators Jan 30, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants