1
0
mirror of https://github.com/FreeRTOS/coreMQTT synced 2025-07-01 16:47:45 +08:00

67 Commits

Author SHA1 Message Date
Dakshit Babbar
8ec72d6ef7
Add CBMC Proofs for the new APIs (#315)
Description
-----------
This PR:
Adds CBMC proofs for the new APIs added for publish retransmits in #308 

Test Steps
-----------
Proofs run without any errors or warnings

Checklist:
----------
- [x] I have tested my changes. No regression in existing tests.
- [x] I have modified and/or added unit-tests to cover the code changes
in this Pull Request.

Related Issue
-----------
<!-- If any, please provide issue ID. -->
By submitting this pull request, I confirm that you can use, modify,
copy, and redistribute this contribution, under the terms of your
choice.

---------

Co-authored-by: DakshitBabbar <dakshba@amazon.com>
Co-authored-by: Gaurav-Aggarwal-AWS <33462878+aggarg@users.noreply.github.com>
2025-03-05 16:49:34 +05:30
Michael Tautschnig
6a3ec09eda
Adjust proof tooling to support CBMC v6 (#304)
Description
-----------
With CBMC v6, unwinding assertions are enabled by default, and object
bits no longer need to be set at compile time. Update various build
rules to use the latest template as provided with CBMC starter kit.

Test Steps
-----------
Tested in CI.

Checklist:
----------
<!--- Go over all the following points, and put an `x` in all the boxes
that apply. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're
here to help! -->
- [ ] I have tested my changes. No regression in existing tests.
- n/a I have modified and/or added unit-tests to cover the code changes
in this Pull Request.

By submitting this pull request, I confirm that you can use, modify,
copy, and redistribute this contribution, under the terms of your
choice.
2024-09-25 09:22:26 -07:00
chinglee-iot
9b993a6981
Update release action for version number (#297)
<!--- Title -->

Description
-----------
* Update the release action for version number include the following
files
  - docs/doxygen/config.doxyfile - PROJECT_NUMBER
  - manifest.yml file - version
  - source file - version header
  - core_mqtt.h - version number
* Add version number check in "Create ZIP and verify package for release
asset" steps. Including the following
  - docs/doxygen/config.doxyfile - PROJECT_NUMBER
  - manifest.yml file - version
  - source file - version header
  - core_mqtt.h - version number
* Update all the version number to "v2.3.0+" and "\<DEVELOPMENT
BRANCH\>"

Test Steps
-----------
Using release action to create release should update the following
* source/include/core_mqtt.h version number
* source files header version number
* doxygen version number
* manifest.yml number
* SBOM file

Tested in personal fork without problem :
https://github.com/FreshDevGo/coreMQTT/actions/runs/9885707328/job/27304218049

Test with wrong source file version number :
https://github.com/FreshDevGo/coreMQTT/actions/runs/9885727002/job/27304274003
Test with wrong manifest.yml version number :
https://github.com/FreshDevGo/coreMQTT/actions/runs/9885726029/job/27304270303
Test with wrong doxygen version number :
https://github.com/FreshDevGo/coreMQTT/actions/runs/9885723302/job/27304269170
Test with wrong version number macro in core_mqtt.h :
https://github.com/FreshDevGo/coreMQTT/actions/runs/9885724835/job/27304268841

Checklist:
----------
<!--- Go over all the following points, and put an `x` in all the boxes
that apply. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're
here to help! -->
- [x] I have tested my changes. No regression in existing tests.
- [ ] ~~I have modified and/or added unit-tests to cover the code
changes in this Pull Request.~~

Related Issue
-----------
<!-- If any, please provide issue ID. -->
By submitting this pull request, I confirm that you can use, modify,
copy, and redistribute this contribution, under the terms of your
choice.
2024-07-11 18:50:40 +05:30
chinglee-iot
a2459c6317
[V2.3.0] Update changelog, version numbers and .md files for release (#291)
* Update changelog for version v2.3.0
* Update version tag in .md files and manifest files
* Update version tag in source files
2024-06-07 17:18:53 +08:00
Tony Josi
58d626a258
[V2.2.0] Update changelog, version numbers and .md files for release (#285)
<!--- Title -->

Description
-----------
This PR update changelog, version numbers and .md (doxygen, size table)
files for release

Test Steps
-----------
<!-- Describe the steps to reproduce. -->

Checklist:
----------
<!--- Go over all the following points, and put an `x` in all the boxes
that apply. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're
here to help! -->
- [ ] I have tested my changes. No regression in existing tests.
- [ ] I have modified and/or added unit-tests to cover the code changes
in this Pull Request.

Related Issue
-----------
<!-- If any, please provide issue ID. -->
By submitting this pull request, I confirm that you can use, modify,
copy, and redistribute this contribution, under the terms of your
choice.
2024-05-03 09:30:23 +05:30
Archit Gupta
05522148da Remove config include from header
core_mqtt_serializer.h included the user coreMQTT config, which spills
the config header's contents into all consumers of coreMQTT's headers.
Macros from the config are no longer used in the the API, so this is
also no longer used for anything, so can be removed.
2024-02-01 14:44:28 -08:00
Archit Gupta
e122ce15e4 Fix CBMC config including NetworkContext definition
The NetworkContext struct should be defined in each c file, not in the
config h file. The API uses it as an opaque type.
2024-02-01 14:44:28 -08:00
Kareem Khazem
143a15eb11 Add CBMC-running GitHub Action;
This commit adds a GitHub Action that runs the CBMC proofs in this
repository upon pushes and pull requests
2023-03-03 22:22:22 +00:00
Aniruddha Kanhere
2775242743
[V2.1.0] Update version numbers and .md files for release (#228)
* Add SPDX identifier to source files

* Add license information to CBMC stub

* Fix spellcheck and the formatting

* Update version numbers and .md files for reelase

Co-authored-by: jasonpcarroll <23126711+jasonpcarroll@users.noreply.github.com>
2022-10-13 12:14:55 -07:00
jasonpcarroll
e7ca765d8f
Fixes to timeout of sendMessageVector and refactor of sendBuffer for consistency (#224)
* Fixes to timeout of sendMessageVector and refactor of sendBuffer for consistency.

* Update size table.

* Fixing some small MISRA related issues

* Formatting fix

* Minor fixes for CBMC.

* Updated logical flow to break instead.

* Revert "Updated logical flow to break instead."

This reverts commit 0ac1c6a61876fe2ee049ce400b46b43b7a3a69e9.

* Updated unit tests for coverage.

* Fix MQTT_Publish Proof

* Fix proofs for connect/sub/unsub API functions

* New timing scheme.

* Update config defaults to reflect new timing change.

* Fix doxygen. Fix formatting. Fix memory table.

* Doxygen fixes.

* Fix CBMC proofs

* Added License identifier back.

* Swapped from warning to error for Visual Studio.

Co-authored-by: Jason Carroll <czjaso@amazon.com>
Co-authored-by: Soren Ptak <skptak@amazon.com>
Co-authored-by: Aniruddha Kanhere <60444055+AniruddhaKanhere@users.noreply.github.com>
2022-10-13 12:03:07 -07:00
Aniruddha Kanhere
dafa7c89e6
Add SPDX identifier to source files (#226)
* Add SPDX identifier to source files

* Add license information to CBMC stub

* Fix spellcheck and the formatting
2022-10-11 18:56:37 -07:00
Aniruddha Kanhere
25b496854b
Remove restriction on LWT payload being zero (#221)
* Update the changelog

* Remove payload non-zero restriction
Ref: http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc398718031

* Update changelog

* Fix 10.4 violation

* FRemove unused files

* Update memory table

* Add assert to check invalid conditions

* Update the assertion to be correct

* Fix last CBMC proof by making sure all pointers are allocated properly
2022-09-22 10:34:17 -07:00
Aniruddha Kanhere
b04c65f3c1
Fix bugs in receiveSingleIteration and optimize sendMessageVector (#218)
* Update the timout check in the send function

* Fix direction of check

* Allow processing of data in the buffer

* Fix formatting and unit-tests

* Update comment to clarify control flow

* Fix Disconnect CBMC proof and update size table

* Fix formatting and CBMC proofs

* Fix last CBMC proof

* Fix broken unit tests and add branch coverage
2022-09-21 15:26:58 -07:00
Aniruddha Kanhere
e5643a3e37
Update version numbers and .md files for release (#215)
* Update version number to 2.0.0

* Update changelog, readme and remaining version numbers
2022-09-19 16:31:54 -07:00
Aniruddha Kanhere
ee13cbdb27
Bring in changes from dev branch to main (#214)
* Update ci.yml (#197)

* Update ci.yml

* Add main branch in the CI YAML

* Add cancel callback API (#196)

* Add cancel callback command

* Update the function name

* Fix formatting

* Update memory estimates

* Add State to MQTT_ProcessLoop so that it can be called in a non-blocking manner (#198)

* Add stateful process-loop function

* Add extra checks; fix bugs and add description of functions

* Add index based stateful processloop

* Clean up

* Renamed functions to make them more coherent with their function

* Remove unused function declarations

* Fixed failing CI checks from previous commits except unit-test

* Fixed spell check and updated size-table

* Fix CBMC proofs

* Empty-Commit to trigger CBMC proofs

* Fix loop unwinding values in the Makefile

* Add upper bound on the buffer size of MQTT

* Increase minimum limit on buffer size to >0

* Add upper bound on the size of the buffer as well

* CBMC: Add memmove stub to accelerate coverage

The commit adds a stub for memmove accelerate CBMC coverage
calculation.  Without this stub, coverage for `MQTT_ProcessLoop` and
`MQTT_ReceiveLoop` fails to converge (gets stuck generating the SAT
formula for the memmove in `receiveSingleIteration`).  This stub
checks that src and dst are nonnull pointers and havocs dst.

* Fix formatting

Co-authored-by: Aniruddha Kanhere <ubuntu@ip-172-31-25-12.us-west-2.compute.internal>
Co-authored-by: Mark R. Tuttle <mrtuttle@amazon.com>

* Remove the use of common buffer (#199)

* Make publish use internal buffers

* Fix comment about packet ID

* Try a different approach for ping and disconnect

* Use writev and flush in conjuction with send

* Update the publish method to use vectors

* Add vectored IO to all functions

* Fix formatting

* Reduce complexity score

* Fix spell check and complexity score

* Fix breaking build

* Add doxygen comments

* Fix doxygen part 2

* Doxygen fix part 3

* Fix doxygen part 4

* Fix some checks

* Fix memory tables

* Fix some small errors

* Fix compiler warnings and breaking CI checks from previous commit

* Fix spell check and doxygen

* Fix a couple of CBMC proofs

* Fix ping and publish proofs

* Update the function name

* Fix more CBMC proofs

* Fix MQTT Connect proof

* Add unwinding loops

* Fix last CBMC proof

* Fix formatting

* Update the Subscribe and Unsubscribe functions

* Fix formatting and doxygen checks

* Fix broken CBMC proofs

* Fix memory statistic table

* Revert changes from serializer source

* update comments to clarify write requirements

* Add a note for write function pointer

* Fix spell check

* Update changelog (#202)

* Update MQTT logging so that log levels of the library do not leak (#205)

* Replace publish state arrays with pointers
Added an MQTT_InIt function for QoS > 0 publishes
Fixed functions which were dealing with state arrays

* Fix CI checks and clean up

* Fix CBMC proofs

* Fix sub and unsub CBMC proofs

* Fix remaining proofs

* Fix remaining CI checks

* Fix spell check

* Minor typo fix (#209)

* Update core_mqtt.h (#208)

* Update core_mqtt.h

* Update core_mqtt.h

Co-authored-by: Aniruddha Kanhere <60444055+AniruddhaKanhere@users.noreply.github.com>

* Update documentation and Doxygen comments in the source (#206)

* Update comments of the MQTT_InIt function

* Updating documentation of more of functions

* Fix formatting and spell check

* Update core_mqtt.h

* Add hooks to the source code (#200)

* Add mutex hooks

* Clean up of code

* Add doxygen comments and fix spell check

* Fix LogError call

* Fix formatting and memory table

* Fix dereference failure

* Update the hook names

* Fix broken builds

* Update the macros and variables

* Reword the briefs of hooks and uncrustify

* Fir formatting

* Protect get packet ID

* Fix formatting

* Fix Unit tests (#212)

* Fix Unit tests

* Update unit tests after new changes

* Fix more UT

* add dummy calls to the transport

* fix build error

* Remove usused variables

* Remove unsused variables

* Remove usused variables

* Unsued parameter

* Fix ut failure

* Fix uninitialized unit test variables

* Fix ut expectation

* Fix unit-tests

* Fix unit test uninitialized variable

* increase unit test coverage

* increase unit test coverage

* Fix unit test build

* State coverage 100%

* Serializer 100% coverage

* 100% UT coverage

* Fix formatting

* Fix size table

* Address PR comments

Co-authored-by: Aniruddha Kanhere <60444055+AniruddhaKanhere@users.noreply.github.com>

* Remove unnecessary ternaries (#211)

Co-authored-by: Aniruddha Kanhere <60444055+AniruddhaKanhere@users.noreply.github.com>

* Fix misra deviations  (#213)

* MISRA compliance update 1

* Fix MISRA errors

* Zero MISRA violations; 13 suppressed

* Fix CI checks

* Update MISRA.md

* Remove deviations

* Fix MISRA.md file

* Fix bug - wasn't incrementing vector length properly.

* Remove unwanted files

* Update comment to clarify the control flow of UT

* Remove 'dev' branch from the CI checks

* Update horrid threshold = 10

Co-authored-by: Aniruddha Kanhere <ubuntu@ip-172-31-25-12.us-west-2.compute.internal>
Co-authored-by: Mark R. Tuttle <mrtuttle@amazon.com>
Co-authored-by: jasonpcarroll <23126711+jasonpcarroll@users.noreply.github.com>
Co-authored-by: alfred gedeon <28123637+alfred2g@users.noreply.github.com>
Co-authored-by: Archit Gupta <71798289+archigup@users.noreply.github.com>
2022-09-19 14:14:55 -07:00
Angelo Nakos
ac8a4ed967 Remove starter-kit and Litani submodules 2022-07-15 10:56:02 -07:00
Angelo Nakos
dc45d0c9cb Update files related to CBMC starter kit 2022-07-15 10:56:02 -07:00
Angelo Nakos
257695d218 Change SPDX identifier in CBMC proof Makefile from Apache-2.0 to MIT-0 2022-07-15 10:56:02 -07:00
Mark Tuttle
d79fbaccd2
Loop invariant update (#181)
* Advance litani submodule for CBMC proofs

* Advance templates submodule for CBMC proofs

Co-authored-by: Mark R. Tuttle <mrtuttle@amazon.com>
2021-12-06 17:43:31 -07:00
Muneeb Ahmed
785f2f2117
Update version to 1.2.0 (#179) 2021-11-11 12:17:38 -08:00
Felipe R. Monteiro
702c4bbe38 Keep assumptions in validity functions
Signed-off-by: Felipe R. Monteiro <felisous@amazon.com>
2021-10-27 16:15:12 -04:00
Felipe R. Monteiro
495b7d74a8 Removes memcpy stub from CBMC proofs
Signed-off-by: Felipe R. Monteiro <felisous@amazon.com>
2021-10-27 16:15:12 -04:00
Felipe R. Monteiro
4795e1b592 Removes all instances of mallocCanFail from CBMC proofs
Signed-off-by: Felipe R. Monteiro <felisous@amazon.com>
2021-10-27 16:15:12 -04:00
Mark R. Tuttle
441244bd20 Advance template submodule for cbmc proofs to latest version 2021-10-15 10:16:48 -04:00
Mark R. Tuttle
158af97bd0 Advance litani submodule for cbmc proofs to latest version 2021-10-15 10:16:48 -04:00
Ronak Fofaliya
a1bbbf9a23
Updated aws-templates-for-cbmc-proofs submodule (#170) 2021-08-19 10:25:02 -07:00
Ronak Fofaliya
e2dcacfc02
testing expensive proofs (#169) 2021-07-23 12:15:06 -07:00
Muneeb Ahmed
51c8067bff
Update version and add C++ guards (#168)
* Update version numbers

* Update CHANGELOG.md

* Add guards for C++ linkage

* Link to Memory estimates markdown from README

* Make possible to override CMake C Standard for tests
2021-07-22 16:49:59 -07:00
Kareem Khazem
8786f32290
Upgrade proof tool submodules (#165)
This commit advances Litani to release 1.10.0, and the starter kit to
the tip-of-tree. This brings the following improvements:

- Profiling
    - Litani measures the memory usage of the CBMC safety checking and
      coverage checking jobs
    - The dashboard includes box-and-whisker diagrams for memory use per
      proof
    - The dashboard includes a graph of how many parallel jobs are
      running over the whole run, making it easy to choose a CI machine
      with enough parallelism
    - It is now possible to designate particular proofs as "EXPENSIVE";
      Litani runs expensive proofs serially, ensuring that they do not
      over-consume resources like RAM.

- UI improvements
    - Each pipeline page includes a table of contents
    - Each pipeline page includes a dependency graph of the pipeline
    - Each job on the pipeline page has a hyperlink to that job
    - The terminal output is now less noisy
2021-07-15 10:55:16 -07:00
Muneeb Ahmed
6b222a7c51
Fix keep alive interval check (#163)
* Fix keep alive checking interval

* Update default ping response timeout to a more reasonable value

* Update changelog

* Update doc for MQTT_PINGRESP_TIMEOUT_MS
2021-07-01 10:13:11 -07:00
Nicholas Rodgers
f756d9833a
Update litani and starter kit submodules (#158)
Update litani to version 1.6.0 and starter kit to tip of tree
2021-03-30 11:12:36 -07:00
Archit Aggarwal
363a2fbca2
Update CHANGELOG and file versioning for upcoming release (#153) 2021-02-25 13:56:58 -08:00
Mark R. Tuttle
48ab9456f7 Update litani submodule 2021-01-11 20:30:22 -05:00
SarenaAWS
d96960ec8d
Update v1.0.1 to v1.1.0 and 202011.00 to 202012.00 for memory estimates link. (#131) 2020-12-09 11:33:30 -08:00
Archit Aggarwal
b581fc4172
Bugfix: Fix interrupted network read operation (#120)
### Problem

The `MQTT_ProcessLoop` and `MQTT_ReceiveLoop` read incoming MQTT packet payload over the network by calling the `recvExact` function. The `recvExact` function can be called multiple times to read the expected number of bytes for the MQTT packet but it also implements a timeout functionality of receiving the expected number of payload within the timeout value passed to the function.
This causes problems when the `Transport_Recv` call returns less than requested number of bytes, and there is a timeout (for example, when calling `MQTT_ProcessLoop` with 0ms duration) which causes the function to assume failure instead of reading the remaining payload of the MQTT packet by calling `Transport_Recv` again. Thus, in such cases, the MQTT connection is severed prematurely even though there is a high probability of receiving the remaining bytes of the MQTT packet over the network.

### Solution
Instead of implementing a timeout on the entire duration of receiving the expected number of remaining MQTT packet bytes in `recvExact`, the use of timeout is being changed to be relevant only on the total time of receiving 0 bytes over the network over multiple calls to `Transport_Recv`.
As this modified meaning of the timeout duration is now unrelated to the timeout duration that the `MQTT_ProcessLoop` or `MQTT_ReceiveLoop` functions are called, a new configuration constant for the `recvExact` timeout value, `MQTT_RECV_POLLING_TIMEOUT_MS`, has been added to the library which will carry a default value of 10ms. 

Co-authored-by: Sarena Meas <sarem@amazon.com>
2020-12-04 19:49:40 -08:00
Kareem Khazem
77e7c0168a
Update litani submodule pointer (#108)
This update ensures that final proof results get posted to GitHub even
when there are proof failures.
2020-12-04 11:35:06 -08:00
SarenaAWS
66a35e4213
Update version v1.0.0 to v1.0.1. (#97) 2020-11-02 12:11:10 -08:00
SarenaAWS
253ab295ff
Remove the memcpy function body in MQTT_Connect and MQTT_SerializeConnect proofs. (#96)
* Add missing function body removal for memcpy to MQTT_Connect and MQTT_SerializeConnect proofs.
2020-11-02 00:32:24 -08:00
SarenaAWS
93c15bdab8
Move transport_interface.h from portable/ to interface/ (#91)
* Move transport_interface.h to interface/ folder.

* Replace all paths to portable with interface.
2020-10-28 14:53:06 -07:00
Mark R. Tuttle
2b8c758020 Use kissat for property checking. 2020-10-23 13:33:38 -04:00
Mark R. Tuttle
e28d320141 Run CBMC proofs with kissat. 2020-10-23 13:33:38 -04:00
Mark R. Tuttle
14e6720c29 Remove CBMC prepare.py from .gitignore. 2020-10-23 13:33:38 -04:00
Mark R. Tuttle
4520348451 Remove CBMC prepare.py needed only for legacy CI. 2020-10-23 13:33:38 -04:00
Mark R. Tuttle
9a133c8bfd Update CBMC proof files from starter kit. 2020-10-23 13:33:38 -04:00
Mark R. Tuttle
42e1785ddc Update CBMC litani and starter kit submodules. 2020-10-23 13:33:38 -04:00
Nicholas Rodgers
421d65d74e Update contents of wellspring.txt 2020-10-05 19:19:10 +01:00
Nicholas Rodgers
88fcf3acc6 Change cbmc-batch.yaml to wellspring.txt 2020-10-05 19:19:10 +01:00
Kareem Khazem
24c4a5fd92 Change proof and harness names to starter kit
This commit updates the template starter kit and modifies the proofs and
Makefiles so that they conform to the latest standard. In particular,
this PR introduces the PROOF_UID variable to give each proof a unique
name.
2020-09-22 02:43:38 +01:00
Kareem Khazem
fd8778575b Highlight differences to 'normal' proof run script
This commit adds some comments that explain how the run-cbmc-proofs.py
script diverges from similar scripts that we use for other projects. The
comments begin with "# PROJECT SPECIFIC".
2020-09-22 02:43:38 +01:00
Kareem Khazem
a8c8bb1d19 Make CBMC use Kissat as the backend
This commit makes Litani run make with the EXTERNAL_SAT_SOLVER variable
set. The template Makefile uses the value of this variable to determine
which external SAT solver CBMC should call out to. We're using Kissat
because the default SAT solver takes too long on two of the proofs,
MQTT_SerializeConnect and MQTT_Connect.
2020-09-22 02:43:38 +01:00