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

Add custom CodeQL config #484

Closed
wants to merge 27 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
c376d55
Add custom CodeQL config
samjwu Apr 24, 2024
2309635
Remove change dir cmd
samjwu Apr 24, 2024
6db0e84
Use ROCm image for container
samjwu Apr 24, 2024
143e169
Install CMake, check LD_PRELOAD
samjwu Apr 24, 2024
ed8b920
Fix indentation
samjwu Apr 24, 2024
00c8a49
Remove check for LD_PRELOAD
samjwu Apr 24, 2024
bce2f0b
Update apt before installing cmake
samjwu Apr 24, 2024
48a7db6
Specify yes for install cmake
samjwu Apr 24, 2024
ddf4ebe
Use complete rocm image
samjwu Apr 24, 2024
3f589d9
Config env var for ROCm
samjwu Apr 24, 2024
2894846
Use minimal rocm image
samjwu Apr 24, 2024
a74049a
Modify env var
samjwu Apr 24, 2024
72a96c2
Modify env var
samjwu Apr 24, 2024
48923e1
Set env var directly before compile
samjwu Apr 24, 2024
db88656
Remove exit 1 and add echo descriptions
samjwu Apr 24, 2024
5c78a6a
Use CMake instead of install script for codeql build
samjwu Apr 25, 2024
2fa11a8
Change CMAKE_CXX_COMPILER for codeql
samjwu Apr 30, 2024
caa88ed
Add example code for CodeQL to flag
samjwu May 1, 2024
db94402
Add sample cpp code for CodeQL to flag
samjwu May 1, 2024
ee71bba
Add bad code to source cpp
samjwu May 1, 2024
f0ab0df
Try build with hipcc for CodeQL
samjwu May 2, 2024
32b8bd0
Make build step verbose
samjwu May 22, 2024
cbd7d5c
Add more queries and update codeql db
samjwu May 22, 2024
c5a348f
Fix yaml
samjwu May 23, 2024
94e6de3
Remove update codeql db
samjwu May 23, 2024
902395d
Fix query formatting
samjwu May 23, 2024
f046fef
Remove python codeql code
samjwu May 27, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
119 changes: 119 additions & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"

on:
push:
branches:
- "develop"
- "master"
- "release**/rocm-rel*"
pull_request:
branches:
- "develop"
- "master"
- "release**/rocm-rel*"
schedule:
- cron: '26 6 * * 0'

jobs:
analyze:
name: Analyze (${{ matrix.language }})
# Runner size impacts CodeQL analysis time. To learn more, please see:
# - https://gh.io/recommended-hardware-resources-for-running-codeql
# - https://gh.io/supported-runners-and-hardware-resources
# - https://gh.io/using-larger-runners (GitHub.com only)
# Consider using larger runners or machines with greater resources for possible analysis time improvements.
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
timeout-minutes: ${{ (matrix.language == 'swift' && 120) || 360 }}
permissions:
# required for all workflows
security-events: write

# required to fetch internal or private CodeQL packs
packages: read

# only required for workflows in private repositories
actions: read
contents: read

strategy:
fail-fast: false
matrix:
include:
- language: c-cpp
build-mode: manual
- language: python
build-mode: none
# CodeQL supports the following values keywords for 'language': 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift'
# Use `c-cpp` to analyze code written in C, C++ or both
# Use 'java-kotlin' to analyze code written in Java, Kotlin or both
# Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
# To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,
# see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.
# If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages

container:
image: rocm/dev-ubuntu-22.04:6.1

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Install CMake
run: |
sudo apt-get update
sudo apt-get install -y cmake

- name: Check ROCm
run: |
ls /opt/rocm -R

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
queries: +security-extended,security-and-quality

# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality

# If the analyze step fails for one of the languages you are analyzing with
# "We were unable to automatically build your code", modify the matrix above
# to set the build mode to "manual" for that language. Then modify this step
# to build your code.
# ℹ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
- if: matrix.build-mode == 'manual'
run: |
echo 'Manual build mode'
echo 'Configure environment variables for ROCm'
export ROCM_PATH=/opt/rocm
export CMAKE_PREFIX_PATH=/opt/rocm:/opt/rocm/bin:/opt/rocm/include:/opt/rocm/lib
echo 'Building library with CMake'
mkdir build
cd build
cmake -DCMAKE_CXX_COMPILER=hipcc -DCMAKE_PREFIX_PATH=/opt/rocm ..
cmake --build . || { echo 'CMake build failed'; exit 1; }
cmake --build . --target install || { echo 'CMake install failed'; exit 1; }
echo 'Build and install completed successfully'

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{matrix.language}}"
28 changes: 28 additions & 0 deletions library/src/rocrand.cpp
Original file line number Diff line number Diff line change
@@ -1,3 +1,31 @@
// BAD: using gmtime
int is_morning_bad() {
const time_t now_seconds = time(NULL);
struct tm *now = gmtime(&now_seconds);
return (now->tm_hour < 12);
}

// GOOD: using gmtime_r
int is_morning_good() {
const time_t now_seconds = time(NULL);
struct tm now;
gmtime_r(&now_seconds, &now);
return (now.tm_hour < 12);
}

void f() {
float i = 0.0f;
//wrong: float used as loop counter
for (i = 0; i < 1000000.0f; i++) { //may execute 1000000 +x/-x times
//...
}
for (i = 0; i < 100000000.0f; i++) { //may never terminate, as rounding errors
//cancel out the addition of 1.0 once
//i becomes large enough
//...
}
}

// Copyright (c) 2017-2024 Advanced Micro Devices, Inc. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
Expand Down
16 changes: 16 additions & 0 deletions testcpp.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
struct {
int s : 4; //wrong: behavior of bit-field members with implicit signage vary across compilers
unsigned int : 24; //correct: explicitly unsigned
signed int : 4; //correct: explicitly signed
} bits;

//Function foo's array parameter has a specified size
void foo(int a[10]) {
int i = 0;
for (i = 0; i <10; i++) {
a[i] = i * 2;
}
}

int my_arr[5];
foo(my_arr); //my_arr is smaller than foo's array parameter, and will cause access to memory outside its bounds
Loading