Bug Summary

File:home/coreboot/node-root/workspace/coreboot_scanbuild/3rdparty/stm/Stm/StmPkg/EdkII/MdePkg/Library/BaseLib/X86FxRestore.c
Warning:line 46, column 3
Dereference of null pointer

Annotated Source Code

Press '?' to see keyboard shortcuts

clang -cc1 -cc1 -triple x86_64-unknown-linux-gnu -analyze -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name X86FxRestore.c -analyzer-checker=core -analyzer-checker=apiModeling -analyzer-checker=unix -analyzer-checker=deadcode -analyzer-checker=security.insecureAPI.UncheckedReturn -analyzer-checker=security.insecureAPI.getpw -analyzer-checker=security.insecureAPI.gets -analyzer-checker=security.insecureAPI.mktemp -analyzer-checker=security.insecureAPI.mkstemp -analyzer-checker=security.insecureAPI.vfork -analyzer-checker=nullability.NullPassedToNonnull -analyzer-checker=nullability.NullReturnedFromNonnull -analyzer-output plist -w -setup-static-analyzer -mrelocation-model pic -pic-level 2 -fhalf-no-semantic-interposition -fno-jump-tables -mframe-pointer=none -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -ffreestanding -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fcoverage-compilation-dir=/home/coreboot/node-root/workspace/coreboot_scanbuild/3rdparty/stm/Stm/build/StmPkg/EdkII/MdePkg/Library/BaseLib -resource-dir /opt/xgcc/lib/clang/17 -include PcdData.h -D COREBOOT32 -D RELEASE -I /home/coreboot/node-root/workspace/coreboot_scanbuild/3rdparty/stm/Stm/StmPkg/Core -I /home/coreboot/node-root/workspace/coreboot_scanbuild/3rdparty/stm/Stm/StmPkg/EDKII/BaseTools/Source/C/Include/X64 -I /home/coreboot/node-root/workspace/coreboot_scanbuild/3rdparty/stm/Stm/StmPkg/EdkII/MdePkg/Include -I /home/coreboot/node-root/workspace/coreboot_scanbuild/3rdparty/stm/Stm/StmPkg/EdkII/MdePkg/Include/X64 -I /home/coreboot/node-root/workspace/coreboot_scanbuild/3rdparty/stm/Stm/StmPkg/Include -I /home/coreboot/node-root/workspace/coreboot_scanbuild/3rdparty/stm/Stm/StmPkg/Include/x64 -I /home/coreboot/node-root/workspace/coreboot_scanbuild/3rdparty/stm/Stm/StmPkg/Core/Runtime -I /home/coreboot/node-root/workspace/coreboot_scanbuild/3rdparty/stm/Stm/StmPkg/EdkII/MdePkg/Library/BaseLib/. -internal-isystem /opt/xgcc/lib/clang/17/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/13/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -source-date-epoch 1714465709 -Os -fdebug-compilation-dir=/home/coreboot/node-root/workspace/coreboot_scanbuild/3rdparty/stm/Stm/build/StmPkg/EdkII/MdePkg/Library/BaseLib -ferror-limit 19 -fgnuc-version=4.2.1 -vectorize-loops -vectorize-slp -analyzer-max-loop 10 -analyzer-output=plist-html -faddrsig -o /cb-build/coreboot_scanbuild.0/PURISM_LIBREM15_V4_STM-scanbuildtmp/2024-05-02-081243-2232343-1/report-9wLDJ6.plist -x c /home/coreboot/node-root/workspace/coreboot_scanbuild/3rdparty/stm/Stm/StmPkg/EdkII/MdePkg/Library/BaseLib/X86FxRestore.c
1/** @file
2 IA-32/x64 AsmFxRestore()
3
4 Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php.
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13**/
14
15
16
17
18#include "BaseLibInternals.h"
19
20/**
21 Restores the current floating point/SSE/SSE2 context from a buffer.
22
23 Restores the current floating point/SSE/SSE2 state from the buffer specified
24 by Buffer. Buffer must be aligned on a 16-byte boundary. This function is
25 only available on IA-32 and x64.
26
27 If Buffer is NULL, then ASSERT().
28 If Buffer is not aligned on a 16-byte boundary, then ASSERT().
29 If Buffer was not saved with AsmFxSave(), then ASSERT().
30
31 @param Buffer A pointer to a buffer to save the floating point/SSE/SSE2 context.
32
33**/
34VOIDvoid
35EFIAPI
36AsmFxRestore (
37 IN CONSTconst IA32_FX_BUFFER *Buffer
38 )
39{
40 ASSERT (Buffer != NULL)do { if (DebugAssertEnabled ()) { if (!(Buffer != ((void *) 0
))) { DebugAssert ("/home/coreboot/node-root/workspace/coreboot_scanbuild/3rdparty/stm/Stm/StmPkg/EdkII/MdePkg/Library/BaseLib/X86FxRestore.c"
, 40, "Buffer != ((void *) 0)"); } } } while (((BOOLEAN)(0==1
)))
;
1
Assuming the condition is true
2
Taking true branch
3
Assuming 'Buffer' is equal to null
4
Taking true branch
5
Loop condition is false. Exiting loop
41 ASSERT (0 == ((UINTN)Buffer & 0xf))do { if (DebugAssertEnabled ()) { if (!(0 == ((UINTN)Buffer &
0xf))) { DebugAssert ("/home/coreboot/node-root/workspace/coreboot_scanbuild/3rdparty/stm/Stm/StmPkg/EdkII/MdePkg/Library/BaseLib/X86FxRestore.c"
, 41, "0 == ((UINTN)Buffer & 0xf)"); } } } while (((BOOLEAN
)(0==1)))
;
6
Assuming the condition is false
7
Taking false branch
8
Loop condition is false. Exiting loop
42
43 //
44 // Check the flag recorded by AsmFxSave()
45 //
46 ASSERT (0xAA5555AA == *(UINT32 *) (&Buffer[sizeof (IA32_FX_BUFFER) - 4]))do { if (DebugAssertEnabled ()) { if (!(0xAA5555AA == *(UINT32
*) (&Buffer[sizeof (IA32_FX_BUFFER) - 4]))) { DebugAssert
("/home/coreboot/node-root/workspace/coreboot_scanbuild/3rdparty/stm/Stm/StmPkg/EdkII/MdePkg/Library/BaseLib/X86FxRestore.c"
, 46, "0xAA5555AA == *(UINT32 *) (&Buffer[sizeof (IA32_FX_BUFFER) - 4])"
); } } } while (((BOOLEAN)(0==1)))
;
9
Assuming the condition is true
10
Taking true branch
11
Dereference of null pointer
47
48 InternalX86FxRestore (Buffer);
49}