blob: afb45431ad7e057e1793e74bad5d04893792b30f [file]
<template>
<div class="page">
<div v-if="contents" class="content">
<h3 v-if="contents.name" class="cve-headline"> {{ contents.name }} - {{ contents.id }}</h3>
<h3 v-else class="cve-headline">{{ contents.id }}</h3>
<p v-if="contents.last_modified" class="last-modified"><em>Last modified {{ contents.last_modified }}</em></p>
<div class="distro-links">
<p><span v-for="(item, key) in contents.ref_urls" v-bind:key="key" class="distro-version-fixed">
<a :href="item" target="_blank">{{key}}<img class="external-link" src="../assets/external-link.svg"></a></span>
</p>
</div>
<span v-if="contents.cwe" class="tag">{{ contents.cwe }}</span>
<div v-if="contents.vendor_specific === true" class="vendor-specific">
<h4>Vendor Specific</h4>
<p>This CVE has been marked <strong>vendor specific</strong>. CVEs with the tag are believed to only affect one or more distribution specific kernels. This maybe due to a custom patch set, error in back porting, or another error.</p>
<p>If you disagree with the Vendor Specific nature of this CVE please submit an <a href="https://github.com/nluedtke/linux_kernel_cves/issues/new?assignees=&labels=Data&template=cve-data-issue.md&title=%5BDATA%5D+CVE-XXXX-XXXXXX">issue</a>.</p>
</div>
<div v-if="contents.vendor_specific != true">
<h4 v-if="contents.nvd_text">NVD Text</h4>
<p class="nvd-text" v-if="contents.nvd_text">{{ contents.nvd_text }}</p>
<h4>Affected Versions</h4>
<p class="versions">{{contents.affected_versions}}</p>
<h4>Hashes</h4>
<ul id="hashes">
<li><strong>Breaks: </strong>
<a class="hash-link"
target="_blank"
:href="'https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit?id=' + contents.breaks">{{contents.breaks}}</a></li>
<li><strong>Fixes: </strong>
<a class="hash-link"
target="_blank"
:href="'https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit?id=' + contents.fixes">{{contents.fixes}}</a></li>
<p class="commit-message"><strong>Commit message:</strong> {{ contents.cmt_msg }}</p>
</ul>
<cvss v-if="contents.cvss2" cvssVersion="cvss2" v-bind:cvssData="contents.cvss2"/>
<cvss v-if="contents.cvss3" cvssVersion="cvss3" v-bind:cvssData="contents.cvss3"/>
<h4>Fixed Versions</h4>
<ul>
<li v-for="(item, stream_id) in stream"
v-bind:key="stream_id"><strong><router-link :to="{ name: 'stream', params: { stream_id: stream_id } }">{{stream_id}}</router-link></strong>:{{item.spacing}}{{item.fixed_version}}</li>
</ul>
</div>
</div>
<div v-else class="content">
<h3 class="cve-headline"> {{ cveId }} not found</h3>
<p>{{cveId}} does not appear in our data. This could be because its too new (within hours), is embargoed, or we believe that it does not affect the upstream kernel.</p>
<p>If you believe this CVE does affect the Linux Kernel, please fill out an issue on our github by clicking the button below.</p>
<div class="row">
<a class="issue" href="https://github.com/nluedtke/linux_kernel_cves/issues/new?assignees=&labels=Data&template=cve-data-issue.md&title=%5BDATA%5D+CVE-XXXX-XXXXXX">file an issue</a>
</div>
</div>
</div>
</template>
<script>
import axios from 'axios'
export default {
components: {
cvss: () => import('./cvss')
},
data () {
return {
stream: [],
contents: [],
errors: [],
cveId: []
}
},
created () {
this.load()
},
watch: {
'$route' () {
this.load()
}
},
methods: {
load: function () {
var cvesUrl = this.$apiBaseUrl + 'data/kernel_cves.json'
var cveID = this.$route.path.split('/')[2]
this.cveId = cveID
document.title = 'Linux Kernel CVEs | ' + cveID
axios.get(cvesUrl)
.then(response => {
var cve = response.data[cveID]
if (cve == null) {
this.contents = null
}
cve['id'] = cveID
this.contents = cve
})
.catch(e => {
this.errors.push(e)
})
var streamUrl = this.$apiBaseUrl + 'data/stream_fixes.json'
axios.get(streamUrl)
.then(response => {
// JSON responses are automatically parsed.
var cveID = this.$route.path.split('/')[2]
var stream = response.data[cveID]
for (var key of Object.keys(response.data[cveID])) {
var spacing = 6 - key.length
stream[key]['spacing'] = ' '.repeat(spacing)
}
this.stream = stream
})
.catch(e => {
this.stream = ''
this.errors.push(e)
})
}
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
.content {
text-align: left;
}
.cve-headline {
font-size: 1.7em;
text-align: left;
margin: 1em 0 0.5em 0;
}
.distro-links {
text-align: left;
}
.last-modified {
font-size: .9em;
text-align: left;
margin-bottom: 2em;
}
.versions {
padding: .5em 1em 1em
}
.commit-message {
background-color: #354649;
color: white;
padding: .5em 1em;
font-size: 12px;
margin-right: 8px;
margin-top: 10px;
white-space: normal;
}
.hash-link {
text-decoration: none;
-webkit-transition: color .2s, background-color .2s; /* Safari */
transition: color .2s, background-color .2s;
}
.hash-link:hover {
background-color: #b1b1b1;
}
h1, h2, h3, h4{
margin-top: 1.75em;
font-weight: 600;
}
ul {
list-style-type: none;
background-color: #9FD9E3;
font-family: monospace;
padding: 1em 2em;
font-size: 1.2em;
white-space: pre;
}
.external-link {
height: 14px;
width: 14px;
margin-left: 3px;
vertical-align: text-top;
}
.tag {
border: 2px solid #CE4513;
background-color: white;
color: #CE4513;
margin-right: 8px;
padding: .5em 1em;
font-size: 12px;
font-weight: 700;
}
.distro-version-fixed a, .disro-version-unfixed a, .distro-version-unknown a {
color:white;
text-decoration: none;
}
.distro-version-fixed {
background-color: #354649;
color: white;
padding: .5em 1em;
font-size: 12px;
margin-right: 8px;
}
.distro-version-unfixed {
background-color: #CE4513;
color: white;
padding: .5em 1em;
font-size: 12px;
margin-right: 8px;
}
.distro-version-unknown {
background-color: #b1b1b1;
color: white;
padding: .5em 1em;
font-size: 12px;
margin-right: 8px;
}
.vendor-specific {
padding: .5em 1em;
margin: 2em 0;
background-color: #ffc2ab;
}
@media only screen and (max-width : 700px) {
/* Styles */
#hashes {
white-space: normal;
}
#content {
padding: .5em
}
ul {
padding: .5em
}
}
a {
color: #354649;
}
.issue {
text-decoration: none;
padding: 1em 2em;
background-color: #42b983;
color: white;
border: 1px solid white;
-webkit-transition: .5s;
transition: .5s;
}
.issue:hover {
color: #42b983;
background-color: white;
border: 1px solid #42b983;
}
.row {
padding: 1em 0;
margin: 1em 0;
}
</style>