aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'elivepatch_client/client/security.py')
-rw-r--r--elivepatch_client/client/security.py98
1 files changed, 0 insertions, 98 deletions
diff --git a/elivepatch_client/client/security.py b/elivepatch_client/client/security.py
deleted file mode 100644
index 7555bc7..0000000
--- a/elivepatch_client/client/security.py
+++ /dev/null
@@ -1,98 +0,0 @@
-from git import Repo
-import os
-import urllib.request as request
-import shutil
-
-
-class CVE(object):
- """
- Check the kernel against a CVE repository
- """
- def __init__(self):
- self.git_url = "https://github.com/nluedtke/linux_kernel_cves"
- self.repo_dir = "/tmp/kernel_cve/"
- self.cve_patches_dir = "/tmp/patches_cve/"
- pass
-
- def download(self):
- Repo.clone_from(self.git_url, self.repo_dir)
-
- def set_repo(self, git_url, repo_dir):
- self.git_url = git_url
- self.repo_dir = repo_dir
-
- def cve_git_id(self):
- major_version, minor_version, revision_version = _current_kernel_version()
- major_version, minor_version, revision_version = 4,9,25
- security_file = open("/tmp/kernel_cve/"+str(major_version)+"."+str(minor_version)+
- "/"+str(major_version)+"."+str(minor_version)+"_security.txt", "r")
- security_versions = []
- for line in security_file:
- if "CVEs fixed in" in line:
- security_versions_tmp = line.strip().split(' ')[3][:-1]
- # if there is not revision, set revision as 0
- if len(security_versions_tmp) == 3:
- security_versions.append(0)
- else:
- security_versions.append(security_versions_tmp.split('.')[2])
- security_file.close()
-
- print('[debug] security versions: ' + str(security_versions))
-
- cve_2d_list = []
- for version in security_versions:
- if int(version) > revision_version:
- cve_2d_list.append(self.cve_id(major_version, minor_version, version))
-
- cve_outfile_list = []
- patch_index = 0
- if not os.path.exists(self.cve_patches_dir):
- os.mkdir(self.cve_patches_dir)
- for cve_list in cve_2d_list:
- # Remove duplicated cve_id from the cve list for not add the same patch
- cve_list = [ii for n,ii in enumerate(cve_list) if ii not in cve_list[:n]]
- for cve_id in cve_list:
- cve_outfile = self.download_cve_patch(cve_id, str(patch_index))
- cve_outfile_list.append([cve_outfile[0], cve_outfile[1].name])
- patch_index +=1
- return cve_outfile_list
-
- def download_cve_patch(self, cve_id, patch_index):
- file_name= self.cve_patches_dir + patch_index + '.patch'
-
- # Download the file from `url` and save it locally under `file_name`:
- with request.urlopen('https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/patch/?id=' + cve_id[1]) as response, \
- open(file_name, 'wb') as out_file:
- shutil.copyfileobj(response, out_file)
- return [cve_id[0],out_file]
-
- def cve_id(self, major_version, minor_version, revision_version):
- security_file = open("/tmp/kernel_cve/"+str(major_version)+"."+str(minor_version)+
- "/"+str(major_version)+"."+str(minor_version)+"_security.txt", "r")
-
- git_security_id = []
- # return cve for a kernel version
- for excluded_line in security_file:
- if ("CVEs fixed in "+str(major_version)+
- "."+str(minor_version)+
- "."+str(revision_version)+
- ":") in excluded_line:
- for included_line in security_file:
- if not "\n" is included_line:
- git_security_id.append([included_line.strip().split(' ')[0].replace(':',''),included_line.strip().split(' ')[1]])
- else:
- # debug
- # print('got cve for '+str(major_version)+
- # "."+str(minor_version)+
- # "."+str(revision_version))
- break
- security_file.close()
- return git_security_id
-
-
-def _current_kernel_version():
- kernel_version = os.uname()[2]
- major_version = int(kernel_version.split('.')[0])
- minor_version = int(kernel_version.split('.')[1])
- revision_version = int((kernel_version.split('.')[2]).split('-')[0])
- return major_version, minor_version, revision_version