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

nanocoap: Make coap_block_finish more resilient #20000

Open
wants to merge 5 commits into
base: master
Choose a base branch
from

Conversation

bergzand
Copy link
Member

@bergzand bergzand commented Oct 19, 2023

Contribution description

This API change removes the error prone nature of coap_block_finish and
related functions. Before this change the position of the block-wise
options in the coap packet buffer was not allowed to change or the
coap_block_finish function would update the wrong byte in the packet
buffer.

After this change the block option is looked up dynamically from the
packet buffer, ensuring that if the position got changed the function
would still behave correctly.

One case where this would cause issues is when an option got removed via coap_opt_remove(), shifting the block1/2 option.

Testing procedure

Testing the affected examples should be sufficient here

Issues/PRs references

None

Happy 20000 you all! 🎉

This adds an internal function to find options in a CoAP packet without
modifying the coap_pkt_t struct
This API change removes the error prone nature of coap_block_finish and
related functions. Before this change the position of the block-wise
options in the coap packet buffer was not allowed to change or the
coap_block_finish function would update the wrong byte in the packet
buffer.

After this change the block option is looked up dynamically from the
packet buffer, ensuring that if the position got changed the function
would still behave correctly.
@bergzand bergzand added the Process: API change Integration Process: PR contains or issue proposes an API change. Should be handled with care. label Oct 19, 2023
@github-actions github-actions bot added Area: network Area: Networking Area: CoAP Area: Constrained Application Protocol implementations Area: sys Area: System Area: examples Area: Example Applications labels Oct 19, 2023
@kaspar030
Copy link
Contributor

Happy 20000 everyone! Incredible! 😄

@bergzand bergzand added the Type: enhancement The issue suggests enhanceable parts / The PR enhances parts of the codebase / documentation label Oct 19, 2023
@benpicco
Copy link
Contributor

examples/nanocoap_server does not like this when I run

aiocoap-client -m GET coap://[fe80::748f:e6ff:fed7:426d%tapbr0]/.well-known/core

With this patch:

main(): This is RIOT! (Version: 2024.01-devel-31-g80dbf-HEAD)
RIOT nanocoap example application
Waiting for address autoconfiguration...
{"IPv6 addresses": ["fe80::748f:e6ff:fed7:426d"]}
make: *** [/home/benpicco/dev/RIOT/examples/nanocoap_server/../../Makefile.include:886: term] Segmentation fault (core dumped)

On master:

main(): This is RIOT! (Version: 2024.01-devel)
RIOT nanocoap example application
Waiting for address autoconfiguration...
{"IPv6 addresses": ["fe80::748f:e6ff:fed7:426d"]}
</vfs>,</sha256>,</riot/ver>,</riot/value>,</riot/board>,</echo/>,</.well-known/core>

@bergzand
Copy link
Member Author

Thanks for testing. This PR breaks the "Options Write Buffer API" functions for nanocoap block wise. Not sure how to solve that here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area: CoAP Area: Constrained Application Protocol implementations Area: examples Area: Example Applications Area: network Area: Networking Area: sys Area: System Process: API change Integration Process: PR contains or issue proposes an API change. Should be handled with care. Type: enhancement The issue suggests enhanceable parts / The PR enhances parts of the codebase / documentation
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants