Zephyr рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреА рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛ рдХреА рдЦреЛрдЬ

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рдЬреЗрдлрд╛рдпрд░

рд╣рдордиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХрд╣рд╛ рдерд╛ рдХрд┐ PVS-Studio рдХреЛрдб рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдХреЛ PlatformIO рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рдХрд╛рд╕ рдЯреАрдо рдиреЗ рдкреНрд▓реЗрдЯрдлрд╝реЛрд▓рд┐рдпреЛ рдЯреАрдо рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд┐рдпрд╛ рдФрд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛, рд╣рд┐рдд рдХреЗ рд▓рд┐рдП, рдЬрд╝реЗрдлрд┐рдпрд░ рд░реАрдпрд▓-рдЯрд╛рдЗрдо рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИред рдХреНрдпреЛрдВ рдирд╣реАрдВ, рд╣рдордиреЗ рд╕реЛрдЪрд╛, рдФрд░ рдпрд╣рд╛рдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЕрдзреНрдпрдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд▓реЗрдЦ рд╣реИред

PlatformIO


рд▓реЗрдЦ рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ PlatformIO рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ , рдЬрд┐рд╕рд╕реЗ рдЙрдирдХрд╛ рдЬреАрд╡рди рдЖрд╕рд╛рди рд╣реЛ рд╕рдХреЗред рдпрд╣ рдПрдХ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЯреВрд▓ рд╣реИред PlatformIO рдХрд╛ рдХреЛрд░ рдПрдХ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдЯреВрд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧ-рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЖрдзреБрдирд┐рдХ рдЪрд┐рдкреНрд╕ рдФрд░ рдЙрдирдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдорджрд░рдмреЛрд░реНрдб рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдФрд░ рд╕рд╛рдЗрдЯ рдореЗрдВ рдкреНрд▓рдЧ-рдЗрди рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рдШрдЯрдХреЛрдВ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реИред

рдкреА рд╡реА рдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ


рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЕрднреА рднреА рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рд┐рд░реНрдл рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдирдП рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдЪрдп рджреВрдВрдЧрд╛ рдЬреЛ рдЕрднреА рддрдХ рдЗрд╕ рдЙрдкрдХрд░рдг рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдирд┐рдпрдорд┐рдд рдкрд╛рдардХ рдЕрдЧрд▓реЗ рдЦрдВрдб рдкрд░ рд╕рд╣реА рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдПрдХ рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╣реИ рдЬреЛ рд╕реА, рд╕реА ++, рд╕реА # рдФрд░ рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдХреЗрд╡рд▓ C рдФрд░ C ++ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдХрд▓рдХ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ:

  • рдЦрд┐рдбрд╝рдХрд┐рдпрд╛рдБ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2010-2019 C, C ++, C ++ / CLI, C ++ / CX (WinRT)
  • рдЦрд┐рдбрд╝рдХрд┐рдпрд╛рдБ IAR рдПрдВрдмреЗрдбреЗрдб рд╡рд░реНрдХрдмреЗрдВрдЪ, ARM C, C ++ рдХреЗ рд▓рд┐рдП C / C ++ рдХрдВрдкрд╛рдЗрд▓рд░
  • рдЦрд┐рдбрд╝рдХрд┐рдпрд╛рдБ рдХреНрдпреВрдПрдирдПрдХреНрд╕ рдореЛрдореЗрдВрдЯрд┐рдХреНрд╕, рдХреНрдпреВрд╕реАрд╕реА рд╕реА, рд╕реА ++
  • рд╡рд┐рдВрдбреЛрдЬ / рд▓рд┐рдирдХреНрд╕ рдХрд╛рдЗрд▓ ilрд╡рд┐рдЬрд╝рди, рдбреАрдПрд╕-рдПрдордбреАрдХреЗ, рдПрдЖрд░рдПрдо рдХрдВрдкрд╛рдЗрд▓рд░ 5/6 рд╕реА, рд╕реА ++
  • рд╡рд┐рдВрдбреЛрдЬ / рд▓рд┐рдирдХреНрд╕ рдЯреЗрдХреНрд╕рд╛рд╕ рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯреНрд╕ рдХреЛрдб рдХрдореНрдкреЛрдЬрд╝рд░ рд╕реНрдЯреВрдбрд┐рдпреЛ, рдПрдЖрд░рдПрдо рдХреЛрдб рдЬреЗрдирд░реЗрд╢рди рдЯреВрд▓реНрд╕ рд╕реА, рд╕реА ++
  • Windows/Linux/macOS. GNU Arm Embedded Toolchain, Arm Embedded GCC compiler, C, C++
  • Windows/Linux/macOS. Clang C, C++
  • Linux/macOS. GCC C, C++
  • Windows. MinGW C, C++

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреА рдЕрдкрдиреА рдЪреЗрддрд╛рд╡рдиреА рд╡рд░реНрдЧреАрдХрд░рдг рдкреНрд░рдгрд╛рд▓реА рд╣реИ , рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рдХреЛрдбрд┐рдВрдЧ рдорд╛рдирдХреЛрдВ CWE , SEI CERT , MISRA рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрд▓рд░реНрдЯ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред

рдЖрдк рдмрдбрд╝реА рд╡рд┐рд░рд╛рд╕рдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рднреА рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд╛рдореВрд╣рд┐рдХ рджрдорди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред рд╕рднреА рд╡рд░реНрддрдорд╛рди рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рддрдХрдиреАрдХреА рдЛрдг рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЫрд┐рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдирдП рдпрд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХреЛрдб рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЯреАрдо рдХреЛ рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ рджреИрдирд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рддреБрд░рдВрдд рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЖрдк рд╕рдордп-рд╕рдордп рдкрд░ рддрдХрдиреАрдХреА рдбреНрдпреВрдЯреА рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдб рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрдиреНрдп рдкрд░рд┐рджреГрд╢реНрдп рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрд╕реЗ рд╕реЛрдирд╛рд░рдХреНрдпреВрдм рдХреЗ рдкреНрд▓рдЧрдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ, рд╕рд░реНрдХрд▓рд╕реАрдЖрдИ, рдЧрд┐рдЯрд▓реИрдм рд╕реАрдЖрдИ / рд╕реАрдбреА, рдЖрджрд┐ рдЬреИрд╕реА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рд╕рдВрднрд╡ рд╣реИред рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдЗрд╕ рд▓реЗрдЦ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рд▓реЗрдЦ рдХреЗ рд╕рд╛рде рдкрд░рд┐рдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ рд╣реИрдВ, рдФрд░ рдЬреЛ рдХрдИ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ: " рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг ред"

рд╣рд▓рдХреА рд╣рд╡рд╛


рдкреНтАНрд▓реЗрдЯрдлреЙрд░реНрдо рдореЗрдВ рдкреАрд╡реАрдПрд╕-рд╕реНтАНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдПрдХреАрдХрд░рдг рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП , рд╣рдорд╛рд░реА рдЯреАрдореЛрдВ рдиреЗ рдмрд╛рдд рдХреА рдФрд░ рдЙрдирд╕реЗ рдПрдВрдмреЗрдбреЗрдб рджреБрдирд┐рдпрд╛ рдХреЗ рдПрдХ рдкреНрд░реЙрдЬреЗрдХреНрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЛ рдХрд╣рд╛ рдЧрдпрд╛, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рдерд╛ рдЬреЗрдлрд╛рдпрд░ред рд╣рдореЗрдВ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдЖрдпрд╛, рдЬреЛ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдерд╛ред

Zephyr рдПрдХ рд╣рд▓реНрдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рд╣реИ рдЬрд┐рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд╕реАрдорд┐рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рд╡рд╛рд▓реЗ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХреЛрдб рдУрдкрди рд╕реЛрд░реНрд╕ рдЕрдкрд╛рдЪреЗ 2.0 рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: ARM (Cortex-M0, Cortex-M3, Cortex-M4, Cortex-M23, Cortex-M33, Cortex-R4, Cortex-R5, Cortex-A53), x86, x86-64, ARC, RISC- рд╡реА, рдПрдирдЖрдИрдУрдПрд╕ II, Xtensaред

рдХреБрдЫ рд╕реБрд╡рд┐рдзрд╛рдПрдВ:

  • рдПрдХреАрдХреГрдд рдкрддрд╛ рд╕реНрдерд╛рдиред рдХрд╕реНрдЯрдо рдХрд░реНрдиреЗрд▓ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдПрдХ рдЕрдЦрдВрдб рдЫрд╡рд┐ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • . , .
  • . .
  • . . .
  • : , , , , .

рд╣рдорд╛рд░реЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╕реЗ, Synopsys рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ ред 2014 рдореЗрдВ, Synopsys рдиреЗ рдХрд╡рд░рд┐рдЯреА рдХрд╛ рдЕрдзрд┐рдЧреНрд░рд╣рдг рдХрд┐рдпрд╛, рдЬрд┐рд╕рдиреЗ рдЗрд╕реА рдирд╛рдо рдХреЗ рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд┐рдпрд╛ред

рдпрд╣ рдХреЗрд╡рд▓ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реИ рдХрд┐ рд╢реБрд░реБрдЖрдд рд╕реЗ рд╣реА, Zephyr рдбреЗрд╡рд▓рдкрд░ Coverity рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ ред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдПрдХ рдмрд╛рдЬрд╛рд░ рдиреЗрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдмреЗрд╣рддрд░ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

Zephyr рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛


рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, Zephyr рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЛрдб рдЧреБрдгрд╡рддреНрддрд╛рдкреВрд░реНрдг рд╣реИред рдпрд╣рд╛рдБ рдореБрдЭреЗ рдРрд╕рд╛ рд╕реЛрдЪрдиреЗ рдХрд╛ рдХрд╛рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

  • PVS-Studio 122 High 367 Medium. , , 560 C/C++ . . 7810 C/C++ 10075 . , . , , .
  • . ┬л┬╗ , .
  • SourceMonitor рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдиреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реБрдП рдЖрдВрдХрдбрд╝реЗ рджрд┐рдП рдХрд┐ 48% рдХреЛрдб рдЯрд┐рдкреНрдкрдгреА рд╣реИред рдпрд╣ рдмрд╣реБрдд рдХреБрдЫ рд╣реИ рдФрд░ рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдЪреНрдЪ рдЪрд┐рдВрддрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ, рдЕрдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рд╕рдордЭрджрд╛рд░реАред
  • рдХрд┐рд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдПрдХ рдЖрд╡рд░рдг рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг, рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓реАрдВ, рдЦреБрдж рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛, рдЬреИрд╕рд╛ рдХрд┐ рдХрднреА-рдХрднреА рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╕рдордп рд╣реЛрддрд╛ рд╣реИред

рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓реЗрдЦрдХ рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВред рдЖрдЗрдП рдЕрдм рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ (рд╕рдВрд╕реНрдХрд░рдг 7.06) рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рдХреБрдЫ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВред

рдЕрд░реНрдз-рдЭреВрдареА рдЪреЗрддрд╛рд╡рдиреА


рдЕрдкрдиреЗ рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рдХрд╛рд░рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛрдб, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдФрд░ рд╕рд╢рд░реНрдд рд╕рдВрдХрд▓рди (#ifdef) рдХреЗ рд╕рд╛рде рдХрд╛рдлреА рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЧрд▓рддреА рдХрд╛ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдЭреВрда рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред

рдПрдХ "рдЕрд░реНрдз-рдорд┐рдереНрдпрд╛" рдЕрднрд┐рдирдп рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг N1

static struct char_framebuffer char_fb;

int cfb_framebuffer_invert(struct device *dev)
{
  struct char_framebuffer *fb = &char_fb;

  if (!fb || !fb->buf) {
    return -1;
  }

  fb->inverted = !fb->inverted;

  return 0;
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА: V560 рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реЛрддрд╛ рд╣реИ :! рдПрдлрдмреА ред cfb.c 188

рд╕реНрдереИрддрд┐рдХ рдЪрд░ рдХрд╛ рдкрддрд╛ рд▓реЗрддреЗ рд╕рдордп, рдПрдХ рдЧреИрд░-рд╢реВрдиреНрдп рд╕реВрдЪрдХ рд╣рдореЗрд╢рд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╕реВрдЪрдХ fb рд╣рдореЗрд╢рд╛ рдЧреИрд░-рд╢реВрдиреНрдп рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рддреНрдпрд╛рдкрди рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╕ рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рдЬрд╛рдВрдЪ рд╣реИ, рдЬреЛ рдХреЛрдИ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рдкрд╣реБрдВрдЪрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрдм рд░рд┐рд▓реАрдЬ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕реЗ рдлреЗрдВрдХ рджреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рднреА рдордВрджреА рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдЗрд╕реА рддрд░рд╣ рдХрд╛ рдПрдХ рдорд╛рдорд▓рд╛, рдореЗрд░реА рд╕рдордЭ рдореЗрдВ, "рдЕрд░реНрдз-рдЧрд▓рдд" рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдСрдкрд░реЗрд╢рди рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрддрд╛ рд╣реИред рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рд╣реИред рдФрд░ рдХреЛрдб рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡реНрдпрд░реНрде рдЪреЗрдХ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╕рдм рдмрд╣реБрдд рдХрдо рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреЗрддрд╛рд╡рдиреА рд▓реЗрдЦ рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИред

"рдЕрд░реНрдз-рдорд┐рдереНрдпрд╛" рд╕рдХреНрд░рд┐рдпрдг N2 рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг

int hex2char(u8_t x, char *c)
{
  if (x <= 9) {
    *c = x + '0';
  } else if (x >= 10 && x <= 15) {
    *c = x - 10 + 'a';
  } else {
    return -EINVAL;
  }
  return 0;
}

рдЪреЗрддрд╛рд╡рдиреА PVS-Studio: V560 рд╕рд╢рд░реНрдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИ: x> = 10. hex.c 31

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдлрд┐рд░ рд╕реЗ рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╕рд╣реА рд╣реИ рдХрд┐ рд╢рд░реНрдд рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣рдореЗрд╢рд╛ рд╕рд╣реА рд╣реИред рдпрджрд┐ рдЪрд░ x 9 рд╕реЗ рдХрдо / рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ 10 рд╕реЗ рдЕрдзрд┐рдХ / рдмрд░рд╛рдмрд░ рд╣реИред рдФрд░ рдХреЛрдб рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

} else if (x <= 15) {

рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдХреЛрдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╣рд╛рдирд┐рдХрд╛рд░рдХ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рддреБрд▓рдирд╛ рд╕рд┐рд░реНрдл рдХреЛрдб рдХреА рд╕реБрдВрджрд░рддрд╛ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреА рдЧрдИ рд╣реИред

рдЕрдм рдПрди 3 рдХреЗ рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВред

рдкрд╣рд▓реЗ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ CHECKIF рдореИрдХреНрд░реЛ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

#if defined(CONFIG_ASSERT_ON_ERRORS)
#define CHECKIF(expr) \
  __ASSERT_NO_MSG(!(expr));   \
  if (0)
#elif defined(CONFIG_NO_RUNTIME_CHECKS)
#define CHECKIF(...) \
  if (0)
#else
#define CHECKIF(expr) \
  if (expr)
#endif

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рдВрдХрд▓рди рдореЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЪреЗрдХ рдпрд╛ рддреЛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрдм рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдпрд╣ рд╕реНрдереВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛:

#define CHECKIF(expr) \
  if (expr)

рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рд╕реЗ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред

int k_queue_append_list(struct k_queue *queue, void *head, void *tail)
{
  CHECKIF(head == NULL || tail == NULL) {
    return -EINVAL;
  }

  k_spinlock_key_t key = k_spin_lock(&queue->lock);
  struct k_thread *thread = NULL;
  if (head != NULL) {
    thread = z_unpend_first_thread(&queue->wait_q);
  }
  ....
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V547 [CWE-571] рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рд╕рд┐рд░! = NULL' рд╣рдореЗрд╢рд╛ рд╕рддреНрдп рд╣реЛрддрд╛ рд╣реИред queue.c 244

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЪреЗрдХрд┐рдВрдЧ (рд╣реЗрдб! = NULL) рд╣рдореЗрд╢рд╛ рд╕рд╣реА рд╣реЛрддреА рд╣реИред рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╣реИред рдпрджрд┐ рд╣реЗрдб рдкреЙрдЗрдВрдЯрд░ NULL рдерд╛, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рдЪреЗрдХ рдХреЗ рдХрд╛рд░рдг рдХрд╛рд░реНрдп рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛:

CHECKIF(head == NULL || tail == NULL) {
  return -EINVAL;
}

рд╕реНрдорд░рдг рдХрд░реЛ рдХрд┐ рдпрд╣рд╛рдБ рдореИрдХреНрд░реЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:

if (head == NULL || tail == NULL) {
  return -EINVAL;
}

рддреЛ, рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЕрдкрдиреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╕рд╣реА рд╣реИ рдФрд░ рдПрдХ рд╕рд╣реА рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдЪреЗрдХ рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ред рдЙрд╕рдХреА рдЬрд░реВрд░рдд рд╣реИред рдПрдХ рдЕрдиреНрдп рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ, рдореИрдХреНрд░реЛ рдЗрд╕ рддрд░рд╣ рдЦреБрд▓реЗрдЧрд╛:

if (0) {
  return -EINVAL;
}

рдФрд░ рдлрд┐рд░ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рджреЛрдмрд╛рд░рд╛ рдЪреЗрдХ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдмреЗрд╢рдХ, рдХреЛрдб рд╕рдВрдХрд▓рди рдХреЗ рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рд╕рдВрдХрд▓рди рдХреЗ рдбреАрдмрдЧ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрдм рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ "рдЕрд░реНрдз-рдЧрд▓рдд" рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рдХрд╣рд╛рдБ рд╕реЗ рдЖрддреА рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдирдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рд╣реИред рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЭреВрдареЗ рдЕрд▓рд░реНрдЯ рдХреЛ рджрдмрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХреЗрд╕ рдХреА рдЪреЗрддрд╛рд╡рдиреА


рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЖрдкрдХреЛ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрд╛? рдпрд╣ рдПрдХ рд╕рдлрд▓рддрд╛ рдереА, рдФрд░ рдЕрдм рд╣рдо рд╡рд┐рднрд┐рдиреНрди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗред рдЙрд╕реА рд╕рдордп, рдореИрдВ рддреБрд░рдВрдд рджреЛ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

  1. . : , , , Coverity. , PVS-Studio - , .
  2. . , ┬л┬╗ . , . GitHub, PVS-Studio.

N1,

static void gen_prov_ack(struct prov_rx *rx, struct net_buf_simple *buf)
{
  ....
  if (link.tx.cb && link.tx.cb) {
    link.tx.cb(0, link.tx.cb_data);
  }
  ....
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V501 [CWE-571] рдмрд╛рдИрдВ рдФрд░ '&&' рдСрдкрд░реЗрдЯрд░ рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВ: link.tx.cb && link.tx.cb pb_adv.c 372

One рдХреЛ рдбрдмрд▓ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдПрдХ рд╣реА рдЪрд░ link.tx.cb ред рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдпрд╣ рдПрдХ рдЯрд╛рдЗрдкреЛ рд╣реИ, рдФрд░ рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рджреВрд╕рд░реА рдЪрд░ link.tx.cb_data рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП ред

Fragment N2, рдмрдлрд╝рд░ рдХреЛ рдУрд╡рд░рдлрд╝реНрд▓реЛ рдХрд░рддреЗ

рд╣реБрдП рдлрд╝рдВрдХреНрд╢рди net_hostname_get рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ , рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

#if defined(CONFIG_NET_HOSTNAME_ENABLE)
const char *net_hostname_get(void);
#else
static inline const char *net_hostname_get(void)
{
  return "zephyr";
}
#endif

рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп, #else рд╢рд╛рдЦрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред рдпрд╣ рд╣реИ рдХрд┐, рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕ рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдлрдВрдХреНрд╢рди рдХреЛ рдЗрд╕ рддрд░рд╣ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
static inline const char *net_hostname_get(void)
{
  return "zephyr";
}

рдлрд╝рдВрдХреНрд╢рди 7 рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИ (рд╣рдо рд▓рд╛рдЗрди рдХреЗ рдЕрдВрдд рдореЗрдВ рдЯрд░реНрдорд┐рдирд▓ рд╢реВрдиреНрдп рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ)ред

рдЕрдм рдЙрд╕ рдХреЛрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рд╕рд░рдгреА рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИред

static int do_net_init(void)
{
  ....
  (void)memcpy(hostname, net_hostname_get(), MAX_HOSTNAME_LEN);
  ....
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V512 [CWE-119] 'рдореЗрдорд╕реАрдкреА' рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХреЙрд▓ рд╕реЗ 'net_hostname_get ()' рдмрдлрд░ рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред log_backend_net.c 114

рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рдмрд╛рдж, MAX_HOSTNAME_LEN рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

(void)memcpy(hostname, net_hostname_get(),
    sizeof("xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx"));

рддрджрдиреБрд╕рд╛рд░, рдбреЗрдЯрд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддреЗ рд╕рдордп, рдПрдХ рдЖрдЙрдЯ-рдСрдл-рдмрд╛рдЙрдВрдбреНрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрддрд╛ рд╣реИред

рдлреНрд░реИрдЧрдореЗрдВрдЯ рдПрди 3, рд╕рдВрднрд╛рд╡рд┐рдд рдмрдлрд░ рдУрд╡рд░рд░рди

int do_write_op_json(struct lwm2m_message *msg)
{
  u8_t value[TOKEN_BUF_LEN];
  u8_t base_name[MAX_RESOURCE_LEN];
  u8_t full_name[MAX_RESOURCE_LEN];
  ....
  /* combine base_name + name */
  snprintf(full_name, TOKEN_BUF_LEN, "%s%s", base_name, value);
  ....
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V512 [CWE-119] 'рд╕реНрдирдкреНрд░рд┐рдВрдЯ' рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХреЙрд▓ рд╕реЗ рдмрдлрд░ 'full_name' рдХрд╛ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╣реЛрдЧрд╛ред lwm2m_rw_json.c 826

рдпрджрд┐ рд╣рдо рд╕реНрдереВрд▓ рдорд╛рдиреЛрдВ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЬреЛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЙрд╕рдХреА рддрд╕реНрд╡реАрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:

u8_t value[64];
u8_t base_name[20];
u8_t full_name[20];
....
snprintf(full_name, 64, "%s%s", base_name, value);

рдлреБрд▓_рдирд╛рдо рдмрдлрд░ рдХреЗ рддрд╣рдд рдХреЗрд╡рд▓ 20 рдмрд╛рдЗрдЯреНрд╕ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЧрдарди рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрд┐рди рд╣рд┐рд╕реНрд╕реЛрдВ рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЧрдарди рд╣реЛрддрд╛ рд╣реИ, рд╡реЗ рдЖрдХрд╛рд░ рдореЗрдВ 20 рдФрд░ 64 рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдмрдлрд╝рд░реНрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдирд┐рд░рдВрддрд░ 64, рд╕реНрдирд┐рдкреНрд░рдл рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ рдФрд░ рд╕рд░рдгреА рдХреЛ рд╡рд┐рджреЗрд╢ рдЬрд╛рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛, рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИ!

рдпрд╣ рдХреЛрдб рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдПрдХ рдмрдлрд░ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╢рд╛рдпрдж рд╣рдореЗрд╢рд╛ рднрд╛рдЧреНрдпрд╢рд╛рд▓реА, рдФрд░ рд╕рдмрд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣рдореЗрд╢рд╛ рдмрд╣реБрдд рдЫреЛрдЯреЗ рд╣реЛрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣ рдХреЛрдб рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдХреНрд▓рд╛рд╕рд┐рдХ рд╕реБрд░рдХреНрд╖рд╛ рджреЛрд╖ CWE-119 рд╣реИ ред

рдЯреБрдХрдбрд╝рд╛ рдПрди 4, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реИ

static int keys_set(const char *name, size_t len_rd, settings_read_cb read_cb,
                    void *cb_arg)
{
  ....
  size_t len;
  ....
  len = read_cb(cb_arg, val, sizeof(val));
  if (len < 0) {
    BT_ERR("Failed to read value (err %zu)", len);
    return -EINVAL;
  }
  ....
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА : V547 [CWE-570] рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рд▓реЗрди <0' рд╣рдореЗрд╢рд╛ рдЭреВрдареА рд╣реЛрддреА рд╣реИред рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдорд╛рди рдХрднреА рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ <0ред Keys.c 312 рд▓реЗрди

рдЪрд░ рдХрд╛ рдПрдХ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП, 0. рд╕реЗ рдХрдо рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рддреНрд░реБрдЯрд┐ рд╕реНрдерд┐рддрд┐ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдкрд░ , read_cb рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП int рдпрд╛ ssize_t рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдЙрджрд╛рд╣рд░рдг:


static inline int mesh_x_set(....)
{
 ssize_t len;
 len = read_cb(cb_arg, out, read_len);
 if (len < 0) {
 ....
}

рдзреНрдпрд╛рди рджреЗрдВред рд╕рдм рдХреБрдЫ read_cb рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдмреБрд░рд╛ рд▓рдЧрддрд╛ рд╣реИ ред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

static u8_t read_cb(const struct bt_gatt_attr *attr, void *user_data)

рдЯрд╛рдЗрдк u8_t рдПрдХ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЪрд╛рд░реНрдЯ рд╣реИ ред

рдлрд╝рдВрдХреНрд╢рди рд╣рдореЗрд╢рд╛ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЪрд╛рд░ рдХреЗ рдХреЗрд╡рд▓ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рджреЗрддрд╛ рд╣реИ ред рдпрджрд┐ рдЖрдк рдЗрд╕ рдорд╛рди рдХреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ int рдпрд╛ ssize_t рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдЪрд░ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВ , рддреЛ рд╕рднреА рдорд╛рди рд╣рдореЗрд╢рд╛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реЛрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдкрд░, рддреНрд░реБрдЯрд┐ рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рд╕реЗ рднреА рдХрд╛рдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдЕрдзреНрдпрдпрди рдореЗрдВ рдХреЛрдИ рдХрдореА рдирд╣реАрдВ рдХреАред

рдЯреБрдХрдбрд╝рд╛ N5, рдХреБрдЫ рдмрд╣реБрдд рд╣реА рдЕрдЬреАрдм

static char *mntpt_prepare(char *mntpt)
{
  char *cpy_mntpt;

  cpy_mntpt = k_malloc(strlen(mntpt) + 1);
  if (cpy_mntpt) {
    ((u8_t *)mntpt)[strlen(mntpt)] = '\0';
    memcpy(cpy_mntpt, mntpt, strlen(mntpt));
  }
  return cpy_mntpt;
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V575 [CWE-628] 'рдореЗрдорд╕реАрдкреА' рдлрд╝рдВрдХреНрд╢рди рдкреВрд░реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИ ред рдЯрд░реНрдорд┐рдирд▓ рдирд▓ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 'strcpy / strcpy_s' рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╢реЗрд▓ред 427

рдЕрдЬреАрдм рдХреЛрдб

рдХрд┐рд╕реА рдиреЗ рд╕реНрдЯреНрд░реИрдкрдЕрдк рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдирд╛рд▓реЙрдЧ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА , рд▓реЗрдХрд┐рди рд╡рд╣ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реБрдЖред

рдЖрдЗрдП рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореЗрдорд╕реАрдкреА рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЗрди рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЯрд░реНрдорд┐рдирд▓ рд╢реВрдиреНрдп рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдмрд╣реБрдд рд╣реА рд╕рдВрджрд┐рдЧреНрдз рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЯрд░реНрдорд┐рдирд▓ 0 рдпрд╣рд╛рдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

((u8_t *)mntpt)[strlen(mntpt)] = '\0';

рд▓реЗрдХрд┐рди рдирд╣реАрдВ! рдпрд╣рд╛рдБ рдПрдХ рдЯрд╛рдЗрдкреЛ рд╣реИ, рдЬрд┐рд╕рдХреА рд╡рдЬрд╣ рд╕реЗ рдЯрд░реНрдорд┐рдирд▓ рд╢реВрдиреНрдп рдХреЛ рд╕реНрд╡рдпрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ! рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ mntpt рд╕рд░рдгреА рдореЗрдВ рд▓рд┐рдЦрдирд╛ , cpy_mntpt рдирд╣реАрдВ ред рдирддреАрдЬрддрди, mntpt_prepare рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЯрд░реНрдорд┐рдирд▓ рд╢реВрдиреНрдп рдХреЗ рд╕рд╛рде рдЕрдкреВрд░реНрдг рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛:

((u8_t *)cpy_mntpt)[strlen(mntpt)] = '\0';

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЕрднреА рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЗрддрдирд╛ рдЬрдЯрд┐рд▓ рдХреНрдпреЛрдВ рдерд╛! рдЗрд╕ рдХреЛрдб рдХреЛ рдирд┐рдореНрди рд╡рд┐рдХрд▓реНрдк рдореЗрдВ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

static char *mntpt_prepare(char *mntpt)
{
  char *cpy_mntpt;

  cpy_mntpt = k_malloc(strlen(mntpt) + 1);
  if (cpy_mntpt) {
    strcpy(cpy_mntpt, mntpt);
  }
  return cpy_mntpt;
}

Fragment N6, рд╕рддреНрдпрд╛рдкрди рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реВрдЪрдХ рдХреЛ dereferencing

int bt_mesh_model_publish(struct bt_mesh_model *model)
{
  ....
  struct bt_mesh_model_pub *pub = model->pub;
  ....
  struct bt_mesh_msg_ctx ctx = {
    .send_rel = pub->send_rel,
  };
  ....
  if (!pub) {
    return -ENOTSUP;
  }
  ....
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V595 [CWE-476] nullrr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'рдкрдм' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрди: 708, 719. access.c 708

рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╛рдорд╛рдиреНрдп рддреНрд░реБрдЯрд┐ рдкреИрдЯрд░реНрдиред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдПрдХ рд╕рджрд╕реНрдп рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

.send_rel = pub->send_rel,

рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдПрдХ рдЪреЗрдХ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реВрдЪрдХ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╕рддреНрдпрд╛рдкрди рд╕реЗ рдкрд╣рд▓реЗ Fragment N7-N9, рд╕реВрдЪрдХ рдбреАрд░реЗрдлрд░реЗрдВрд╕рд┐рдВрдЧ

int net_tcp_accept(struct net_context *context, net_tcp_accept_cb_t cb,
                   void *user_data)
{
  ....
  struct tcp *conn = context->tcp;
  ....
  conn->accept_cb = cb;

  if (!conn || conn->state != TCP_LISTEN) {
    return -EINVAL;
  }
  ....
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V595 [CWE-476] null рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'рдХреЙрди' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓рд╛рдЗрдиреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ: 1071, 1073. tcp2.c 1071

рдкрд┐рдЫрд▓реЗ рдорд╛рдорд▓реЗ рдХреЗ рд╕рдорд╛рдиред рдпрд╣рд╛рдВ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдЗрд╕ рддрд░рд╣ рдХреА рджреЛ рдФрд░ рдЧрд▓рддрд┐рдпрд╛рдБ рдпрд╣рд╛рдБ рджреЗрдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ:

  • V595 [CWE-476] 'рд╕рдВрджрд░реНрдн-> tcp' рдкреЙрдЗрдВрдЯрд░ рдХреЛ nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 1512, 1518. tcp.c 1512
  • V595 [CWE-476] nullptr рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 'fsm' рдкреЙрдЗрдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 365, 382. fsm.c 365

рдлреНрд░реИрдЧрдореЗрдВрдЯ рдПрди 10, рдЧрд▓рдд рдЬрд╛рдВрдЪ

static int x509_get_subject_alt_name( unsigned char **p,
                                      const unsigned char *end,
                                      mbedtls_x509_sequence *subject_alt_name)
{
  ....
    while( *p < end )
    {
        if( ( end - *p ) < 1 )
            return( MBEDTLS_ERR_X509_INVALID_EXTENSIONS +
                    MBEDTLS_ERR_ASN1_OUT_OF_DATA );
    ....
  }
  ....
}

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдиреА : V547 [CWE-570] рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ '(рдЕрдВрдд - * p) <1' тАЛтАЛрд╣рдореЗрд╢рд╛ рдЧрд▓рдд рд╣реИред x509_crt.c 635

рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:

  • * рдкреА <рдЕрдВрдд
  • (рдЕрдВрдд - * рдкреГ) рез

рд╡реЗ рдПрдХ-рджреВрд╕рд░реЗ рдХрд╛ рдЦрдВрдбрди рдХрд░рддреЗ рд╣реИрдВред

рдпрджрд┐ (* p <рдЕрдВрдд), рддреЛ (рдЕрдВрдд - * p) рд╣рдореЗрд╢рд╛ 1 рдпрд╛ рдЕрдзрд┐рдХ рдХрд╛ рдорд╛рди рджреЗрдЧрд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрд╣рд╛рдВ рдХреБрдЫ рдЧрдбрд╝рдмрдбрд╝ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдПред

рдЯреБрдХрдбрд╝рд╛ N11, рдЕрдЧрдореНрдп рдХреЛрдб

uint32_t lv_disp_get_inactive_time(const lv_disp_t * disp)
{
    if(!disp) disp = lv_disp_get_default();
    if(!disp) {
        LV_LOG_WARN("lv_disp_get_inactive_time: no display registered");
        return 0;
    }

    if(disp) return lv_tick_elaps(disp->last_activity_time);

    lv_disp_t * d;
    uint32_t t = UINT32_MAX;
    d          = lv_disp_get_next(NULL);
    while(d) {
        t = LV_MATH_MIN(t, lv_tick_elaps(d->last_activity_time));
        d = lv_disp_get_next(d);
    }

    return t;
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V547 [CWE-571] рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рд╡рд┐рд╡рд╛рдж' рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╣реЛрддрд╛ рд╣реИред 148 lv_disp.c

рд╕рдорд╛рд░реЛрд╣ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ disp рдПрдХ рдЕрд╢рдХреНрдд рд╕реВрдЪрдХ рд╣реИред рдлрд┐рд░, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдбрд┐рд╕реНрдкреНрдпреВрдЯ рдкреЙрдЗрдВрдЯрд░ рдЕрд╢рдХреНрдд рдирд╣реАрдВ рд╣реИ (рдФрд░ рдпрд╣ рд╣рдореЗрд╢рд╛ рдРрд╕рд╛ рд╣реИ), рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдлрд┐рд░ рд╕реЗ рдЕрдкрдирд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреЛрдб рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдХрднреА рднреА рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рд╡рд┐рдЦрдВрдбрди N12, рдЕрдЬреАрдм рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп

static size_t put_end_tlv(struct lwm2m_output_context *out, u16_t mark_pos,
        u8_t *writer_flags, u8_t writer_flag,
        int tlv_type, int tlv_id)
{
  struct tlv_out_formatter_data *fd;
  struct oma_tlv tlv;
  u32_t len = 0U;

  fd = engine_get_out_user_data(out);
  if (!fd) {
    return 0;
  }

  *writer_flags &= ~writer_flag;

  len = out->out_cpkt->offset - mark_pos;

  /* use stored location */
  fd->mark_pos = mark_pos;

  /* set instance length */
  tlv_setup(&tlv, tlv_type, tlv_id, len);
  len = oma_tlv_put(&tlv, out, NULL, true) - tlv.length;
  return 0;
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V1001 'len' рд╡реИрд░рд┐рдПрдмрд▓ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрдд рддрдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред lwm2m_rw_oma_tlv.c 338

рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рджреЛ рд░рд┐рдЯрд░реНрди рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рджреЛрдиреЛрдВ 0. рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдпрд╣ рдЕрдЬреАрдм рдмрд╛рдд рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рд╣рдореЗрд╢рд╛ рд░рд┐рдЯрд░реНрди рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рднреА рдЕрдЬреАрдм рд╣реИ рдХрд┐ рд▓реЗрди рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдм рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рдмрд╛рдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЭреЗ рдмрдбрд╝рд╛ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

  len = oma_tlv_put(&tlv, out, NULL, true) - tlv.length;
  return len;
}

рд╡рд┐рд░рд╛рдо N13-N16, рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рддреНрд░реБрдЯрд┐

static int nvs_startup(struct nvs_fs *fs)
{
  ....
  k_mutex_lock(&fs->nvs_lock, K_FOREVER);
  ....
  if (fs->ate_wra == fs->data_wra && last_ate.len) {
    return -ESPIPE;
  }
  ....
end:
  k_mutex_unlock(&fs->nvs_lock);
  return rc;
}

PVS-Studio рдЪреЗрддрд╛рд╡рдиреА: V1020 'k_mutex_unlock' рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЧрдпрд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 620, 549. nvs.c 620

рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╣реЛрддреА рд╣реИ рдЬрдм рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдореНрдпреВрдЯреЗрдХреНрд╕ рдХреЛ рдЕрдирд▓реЙрдХ рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдкрдирд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рдордЭрд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрдирд╛ рд╕рд╣реА рд╣реЛрдЧрд╛:

static int nvs_startup(struct nvs_fs *fs)
{
  ....
  k_mutex_lock(&fs->nvs_lock, K_FOREVER);
  ....
  if (fs->ate_wra == fs->data_wra && last_ate.len) {
    rc = -ESPIPE;
    goto end;
  }
  ....
end:
  k_mutex_unlock(&fs->nvs_lock);
  return rc;
}

рдЗрд╕ рддрд░рд╣ рдХреА рддреАрди рдФрд░ рддреНрд░реБрдЯрд┐рдпрд╛рдВ:

  • V1020 'k_mutex_unlock' рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЧрдпрд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 574, 549. рдПрдирд╡реАрдПрд╕рд╕реА 574
  • V1020 'k_mutex_unlock' рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЧрдпрд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 908, 890. net_context.c 908
  • V1020 'k_mutex_unlock' рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЧрдпрд╛ред рдЪреЗрдХ рд▓рд╛рдЗрдиреЗрдВ: 1194, 1189. рд╢реЗрд▓ред 1194

рдирд┐рд╖реНрдХрд░реНрд╖


рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдЖрдкрдиреЗ рдЗрд╕рдХрд╛ рдЖрдирдВрдж рд▓рд┐рдпрд╛ред рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдФрд░ рдЕрдиреНрдп рд░реЛрдЪрдХ рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдкрд░ рдЬрд╛рдБрдЪ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдкрд░ рдЬрд╛рдПрдБ ред

рд▓реЗрдЦрди рдХреЛрдб рдХреЗ рдЪрд░рдгреЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдПрдореНрдмреЗрдбреЗрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рдРрд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЬрд┐рдирдореЗрдВ рдЕрдХреНрд╕рд░ рд╕рдордп рд▓реЗрдиреЗ рд╡рд╛рд▓реА рдФрд░ рдорд╣рдВрдЧреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реЛрддреА рд╣реИред

рдореИрдВ рдпрд╣ рднреА рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рди рдХрд░реЗрдВред рд▓реЗрдЦ рджреЗрдЦреЗрдВ: рд╕реА рдФрд░ рд╕реА ++ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рджрд┐рд▓рдЪрд╕реНрдк рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдХреИрд╕реЗ рджреЗрдЦреЗрдВ ?



рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рдПрдВрдбреНрд░реА рдХрд╛рд░рдкреЛрд╡ред Zephyr рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХреЛрдб рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ ред

All Articles