Commit graph

178 commits

Author SHA1 Message Date
dlee
419e1534b0 Bug 1562822 - P3. Reset all the tables that fail to apply a Safe Browsing update. r=gcp
Before this patch, when Safe Browsing updating process discovers an error, it
quits and resets the table failing to update.
After this patch, updating process will continue to run when an error
occurs to find all the tables failing to apply an update.

Differential Revision: https://phabricator.services.mozilla.com/D42615

--HG--
extra : moz-landing-system : lando
2019-08-21 12:08:12 +00:00
dlee
25f266e670 Bug 1562822 - P2. Reset corrupted Safe Browsing database before triggering an update. r=gcp
Patch P2 & P3 refine how Safe Browsing handles Safe Browsing database
loading failure.

Safe Browsing databases are read in 3 scenarios:
1. |GetLookupCache| is called on startup. Safe Browsing reads prefix
files in this case. Metadata for updates(.sbstore, .metadata) are not
read in this scenario.

2. |TableRequest| is called before applying an update, Safe Browsing
reads update metadata to apply a partial update.

3. During an update, Safe Browsing reads both prefix files and metadata
in order to merge the update result.

For Case 1, we reset a table's database only when it returns FILE_CORRUPTED
while loading prefixes from the prefix file(.vlpset).

For Case 2, we reset a table's database when the table fails to load its
metadata file or prefix file. This is because we need to make sure both
files are complete so we can correctly perform a partial update.
Note that in this case, we don't just reset the database when "FILE_CORRUPTED"
is detected, we reset the database as long as an error occurs while loading the
database.

For Case 3, For all the tables failing to load their database during an
updating process, the databases of those tables will be reset.

Case 1 and Case 2 are done in Patch P2; Case 3 is done in Patch P3

Differential Revision: https://phabricator.services.mozilla.com/D42614

--HG--
extra : moz-landing-system : lando
2019-08-21 12:08:03 +00:00
dlee
d9634cfdf5 Bug 1531354 - P6. Remove unused testing files and load old version of prefixes data. r=gcp
This patch does the following:
1. Remove testing files from disk because they are no longer required.
2. Load completions from previous version of HashStore until an update
   is applied.
3. Older version of HashStore(.sbstore) & PrefixSet(.vlpset) will be
   removed during an update

Differential Revision: https://phabricator.services.mozilla.com/D36002

--HG--
extra : moz-landing-system : lando
2019-06-29 19:24:14 +00:00
dlee
d1ed4c245a Bug 1531354 - P5. Safe Browsing test entries are directly stored in LookupCache. r=gcp
Create test entries via update introduces performance overhead.
We can store them directly in LookupCache and do not save test entries
to disk.

Differential Revision: https://phabricator.services.mozilla.com/D34576

--HG--
extra : moz-landing-system : lando
2019-06-29 19:05:41 +00:00
dlee
82f987f7c9 Bug 1531354 - P4. Skip reading hashstore in RegenActiveTables. r=gcp
For Safe Browsing V2, Data for lookup(LookupCache) and data for update(HashStore)
are now separated. |RegenActiveTables| doesn't need to check the chunk
number in HashStore.

Differential Revision: https://phabricator.services.mozilla.com/D34575

--HG--
extra : moz-landing-system : lando
2019-06-21 23:11:06 +00:00
dlee
b57c5c8716 Bug 1531354 - P3. Do not store completion in HashStore. r=gcp
Completions are now stored in .vlpset, we can remove it from .sbstore
Functions related to optimize reading completions from .sbstore can also
be removed because it is no longer HashStore's responsibility

Differential Revision: https://phabricator.services.mozilla.com/D34574

--HG--
extra : moz-landing-system : lando
2019-06-26 19:45:08 +00:00
dlee
128b3c174b Bug 1531354 - P1. Remove mPrefixSet and mUpdateCompletions from LookupCacheV2 and use mVLPresetSet. r=gcp
The goal of the series of patches is to improve Safe Browsing performance by
skipping uncessary file IO.

The first two patches is to remove the dependency between LookupCache and HashStore, so HashStore is only
responsible for udpates.

Before this patch, LookupCacheV2 treats prefixes and completions
differently. It uses two data structures to maintain
prefixes:
1. mPrefixSet to store prefixes from .pset
2. mUpdateCompletions to store completions from .sbstore

After this patch
1. LookupCacheV2 & LookupCacheV4 both use variable-length
prefix set. mUpdateCompletions and mPrefixSet are removed and
mVLPrefixSet is used to store all prefixes data.
2. Move common function to base class.

Note that in this patch, conversion between 4/32 bytes prefixes and
mVLPrefixSet is not yet included, it will be handled in next patch.
This patch tries not to deal with any logic changes, only focus on refining
LookupCacheV2 & LookupCacheV4 class structure to use variable-length
prefixset for both classes.

Differential Revision: https://phabricator.services.mozilla.com/D34546

--HG--
extra : moz-landing-system : lando
2019-06-21 23:07:52 +00:00
Bogdan Tara
12ee428e36 Backed out changeset 5bb757ffb7e9 (bug 1553855) for Classifier.cpp assertion failures CLOSED TREE 2019-05-28 04:47:53 +03:00
Randell Jesup
9e861b651a Bug 1553855: Make the Classifier Update thread a LazyIdle thread r=dimi
Differential Revision: https://phabricator.services.mozilla.com/D32529

--HG--
extra : moz-landing-system : lando
2019-05-27 12:33:40 +00:00
dlee
2c8cc96c07 Bug 1553963 - Fix Safe Browsing doesn't cache the gethash result for V4 tables. r=gcp
We use ".pset" to find active tables, but in Bug 1353956, v4 prefix files
are renamed to ".vlpset".

This patches include both 'pset' and 'vlpset' to ScanStoreDir.

Differential Revision: https://phabricator.services.mozilla.com/D32433

--HG--
extra : moz-landing-system : lando
2019-05-24 19:42:00 +00:00
Sylvestre Ledru
7f60810d86 Bug 1519636 - Reformat recent changes to the Google coding style r=Ehsan
# ignore-this-changeset

Differential Revision: https://phabricator.services.mozilla.com/D27245

--HG--
extra : moz-landing-system : lando
2019-04-12 13:14:25 +00:00
dlee
2d7d027aab Bug 1543341 - Refine Safe Browsing log output. r=baku
After calling Lookup API per table, Safe Browsing outputs too many debug
message for a single URL lookup. Refine the current output.

Differential Revision: https://phabricator.services.mozilla.com/D27066

--HG--
extra : moz-landing-system : lando
2019-04-11 18:57:56 +00:00
dlee
66dc1dfad0 Bug 1353956 - P2. Do not use SHA-256 while loading the V4 prefix files. r=gcp
SHA256 is an expensive operation, we should avoid using them if
possible. SafeBrowsing prefix files are loaded during startup and
verify integrity with SHA256 which may affect the performance
especially on the low-end device.

This patch simply removes the SHA256 integrity check. CRC32 version
integrity check will be introduced in the other patch.

This patch also changes the behavior of recording
"Telemetry::URLCLASSIFIER_VLPS_LOAD_CORRUPT" a little bit.
It used to records only once per session(during startup, the first
time we load prefix set), now it records per update.

Differential Revision: https://phabricator.services.mozilla.com/D21461

--HG--
extra : moz-landing-system : lando
2019-03-07 14:40:28 +00:00
Dimi Lee
5ad694e4e9 Bug 1353956 - P1. Rename checksum used in SafeBrowsing V4 to SHA256. r=gcp
SafeBrowsing V4 protocol use SHA-256 as the checksum to check integrity
of update data and also the integrity of prefix files.

SafeBrowsing V2 HashStore use MD5 as the checksum to check integrity of
.sbstore

Since we are going to use CRC32 as the integrity check of V4 prefix files,
I think rename V4 "checksum" to SHA256 can improve readability.

Differential Revision: https://phabricator.services.mozilla.com/D21460

--HG--
extra : moz-landing-system : lando
2019-03-07 14:40:14 +00:00
Dorel Luca
fc78eb74a3 Backed out 6 changesets (bug 1353956) for Linux Build bustage
Backed out changeset 71dafccc22ae (bug 1353956)
Backed out changeset f1f29fe519cf (bug 1353956)
Backed out changeset 4978556a66f6 (bug 1353956)
Backed out changeset bc0b91abce9b (bug 1353956)
Backed out changeset 6b8412db5a05 (bug 1353956)
Backed out changeset 3d326cfcd002 (bug 1353956)
2019-03-07 01:49:03 +02:00
dlee
d253a723f7 Bug 1353956 - P2. Do not use SHA-256 while loading the V4 prefix files. r=gcp
SHA256 is an expensive operation, we should avoid using them if
possible. SafeBrowsing prefix files are loaded during startup and
verify integrity with SHA256 which may affect the performance
especially on the low-end device.

This patch simply removes the SHA256 integrity check. CRC32 version
integrity check will be introduced in the other patch.

This patch also changes the behavior of recording
"Telemetry::URLCLASSIFIER_VLPS_LOAD_CORRUPT" a little bit.
It used to records only once per session(during startup, the first
time we load prefix set), now it records per update.

Differential Revision: https://phabricator.services.mozilla.com/D21461

--HG--
extra : moz-landing-system : lando
2019-02-28 08:18:46 +00:00
Dimi Lee
1032932288 Bug 1353956 - P1. Rename checksum used in SafeBrowsing V4 to SHA256. r=gcp
SafeBrowsing V4 protocol use SHA-256 as the checksum to check integrity
of update data and also the integrity of prefix files.

SafeBrowsing V2 HashStore use MD5 as the checksum to check integrity of
.sbstore

Since we are going to use CRC32 as the integrity check of V4 prefix files,
I think rename V4 "checksum" to SHA256 can improve readability.

Differential Revision: https://phabricator.services.mozilla.com/D21460

--HG--
extra : moz-landing-system : lando
2019-02-28 08:12:36 +00:00
Andrea Marchesini
c607e645dc Bug 1528596 - Devirtualize accesses to nsUrlClassifierUtils, r=dimi
Differential Revision: https://phabricator.services.mozilla.com/D20086

--HG--
extra : moz-landing-system : lando
2019-02-19 14:35:57 +00:00
Kris Maglione
b83df4e952 Bug 1478124: Part 8a - Update toolkit module to use a static component manifest. r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D15039

--HG--
extra : rebase_source : 1683d6ced9a6c10e6fa19425debbb51950b9b629
extra : source : d94039b199437180309264cb4c206ae7ebb7d21d
2018-12-16 16:03:00 -08:00
Andrea Marchesini
4e02fc2bf6 Bug 1522265 - Moving malware, phishing and blocked URIs to features - part 3 - DBService updated, r=dimi 2019-01-29 10:11:34 +01:00
arthur.iakab
652cde9859 Backed out 4 changesets (bug 1522265) for mochitest assertion failures on extensions/cookie/nsPermissionManager.cpp CLOSED TREE
Backed out changeset 38b4179568c7 (bug 1522265)
Backed out changeset 38b824df9d02 (bug 1522265)
Backed out changeset 6085d51681f8 (bug 1522265)
Backed out changeset e6a0832f3b11 (bug 1522265)
2019-01-29 14:25:00 +02:00
Andrea Marchesini
0b9a1617c2 Bug 1522265 - Moving malware, phishing and blocked URIs to features - part 3 - DBService updated, r=dimi 2019-01-29 10:11:34 +01:00
arthur.iakab
c1fae83952 Backed out 16 changesets (bug 1478124) for failing android geckoview-junit CLOSED TREE
Backed out changeset fce62c77a56b (bug 1478124)
Backed out changeset eb2fa3b5edf7 (bug 1478124)
Backed out changeset 8dacce59fcc0 (bug 1478124)
Backed out changeset 012fd0107204 (bug 1478124)
Backed out changeset 496aaf774697 (bug 1478124)
Backed out changeset 21f4fda03159 (bug 1478124)
Backed out changeset b0444e0bc801 (bug 1478124)
Backed out changeset d94039b19943 (bug 1478124)
Backed out changeset 5d85deac61c2 (bug 1478124)
Backed out changeset 929fd654c9df (bug 1478124)
Backed out changeset 1ddd80d9e91a (bug 1478124)
Backed out changeset b8d2dfdfc324 (bug 1478124)
Backed out changeset f500020a273a (bug 1478124)
Backed out changeset dd00365ebb55 (bug 1478124)
Backed out changeset 538e40c5ee13 (bug 1478124)
Backed out changeset bedaa9c437ad (bug 1478124)
2019-01-29 10:03:06 +02:00
Kris Maglione
d20f7f8e72 Bug 1478124: Part 8a - Update toolkit module to use a static component manifest. r=froydnj
Differential Revision: https://phabricator.services.mozilla.com/D15039

--HG--
extra : rebase_source : 55c387662960d82986a2a0205d3b8e451304db4b
extra : absorb_source : bd201f3bcf08f70480f19a22bfb7a8bd9cb015a1
extra : histedit_source : ec13a9b248801ab36baa275e566765734e6f3717
2018-12-16 16:03:00 -08:00
dlee
c9e502918e Bug 1504774 - Fix url-classifier worker thread is not aborted while shutting down. r=francois
In Bug 1453038, |mUpdateInterrupted| is set in Classifer::Close() which is
called by PreShutdown to abort an ongoing update. That doesn't handle
all the cases.

The SafeBrowsing update involves two threads, worker thread, and update
thread. Update thread takes care of most of the update work, when it finishes
its task, it posts a task back to the worker thread to apply the updated database
and also do some cleanup stuff. Then the update is complete.

The fix in Bug 1453038 doesn't abort an update if the woker thread is doing
the job. This is because the |mUpdateInterrupted| flag is set in the
worker thread. The PreShutdown event which eventually sets the flag has to
wait until the worker thread's current task is done.

In this patch:
1. Check nsUrlClassifierDBService::ShutdownHasStarted() to abort shutdown.
This is set by main thread so both worker thread and update thread can
be interrupted now.
2. mIsClosed is now replaced by the mUpdateInterrupted. The semantics of
mUpdateInterrupted is now changed to abort update for any internal APIs
which should cause an update to abort.
3. Remove |mUpdateInterrupted| and |ShutdownHasStarted()| checks and
unify with |ShouldAbort()|

Differential Revision: https://phabricator.services.mozilla.com/D12229

--HG--
extra : moz-landing-system : lando
2018-12-19 10:03:19 +00:00
Andrea Marchesini
49626a83f6 Bug 1511436 - Cleanup URL-Classifier code - part 4 - lookup optimization, r=dimi 2018-12-14 12:40:18 +01:00
Andrea Marchesini
71b120ca17 Bug 1511436 - Cleanup URL-Classifier code - part 2 - nsUrlClassifierDBService::AsyncClassifyLocalWithFeatures, r=dimi 2018-12-14 12:40:17 +01:00
Sylvestre Ledru
265e672179 Bug 1511181 - Reformat everything to the Google coding style r=ehsan a=clang-format
# ignore-this-changeset

--HG--
extra : amend_source : 4d301d3b0b8711c4692392aa76088ba7fd7d1022
2018-11-30 11:46:48 +01:00
Dimi Lee
e05a4185a6 Bug 1481819 - Make Safe Browsing directory-based file copy interruptible. r=francois
A directory-based file copy without checkpoint to abort may take lots
of time to finish. This cause an issue that if firefox is shutting down
and try to close an ongoing update thread, main-thread may be blocked
for a long time.

This patch adds a wrapper for copying an entire directory, within this
wrapper, we use file-based copy and add checkpoints to let update thread
has a chance to abort.

Differential Revision: https://phabricator.services.mozilla.com/D3414

--HG--
extra : moz-landing-system : lando
2018-09-18 14:29:20 +00:00
Gurzau Raul
f4cb8a59ba Backed out changeset 6f6886c89554 (bug 1481819) for failing at url-classifier/tests/mochitest/test_classified_annotations.html 2018-09-14 21:49:04 +03:00
Dimi Lee
9117dcd8f1 Bug 1481819 - Make Safe Browsing directory-based file copy interruptible. r=francois
A directory-based file copy without checkpoint to abort may take lots
of time to finish. This cause an issue that if firefox is shutting down
and try to close an ongoing update thread, main-thread may be blocked
for a long time.

This patch adds a wrapper for copying an entire directory, within this
wrapper, we use file-based copy and add checkpoints to let update thread
has a chance to abort.

Differential Revision: https://phabricator.services.mozilla.com/D3414

--HG--
extra : moz-landing-system : lando
2018-09-14 15:33:24 +00:00
Francois Marier
9f161ab08f Bug 1461515 - Split tracking annotations from tracking protection. r=dimi
This makes it possible to use different lists for tracking protection
and for the features that rely on tracking annotations.

Differential Revision: https://phabricator.services.mozilla.com/D2484

--HG--
extra : moz-landing-system : lando
2018-08-01 20:45:41 +00:00
dlee
8ca348be37 Bug 1453038 - Interrupt update when firefox is shutting down. r=francois
URL Classifier has a mUpdateInterrupted flag to abort an ongoing
update in several checkpoints, but we didn't use this while shutting down.

Set this flag in PreShutdown() to avoid url-classifier worker thread or
update thread takes too long to finish an update.

Differential Revision: https://phabricator.services.mozilla.com/D2157

--HG--
extra : moz-landing-system : lando
2018-07-16 16:48:53 +00:00
Francois Marier
00afdd238f Bug 1467581 - Do less work in Reset() if Close() has been called. r=gcp
If Reset() is interleaved with a shutdown, there's no point in
finishing up and we may as well bail early.

MozReview-Commit-ID: Lhm6NfAEgSj

--HG--
extra : rebase_source : e74cc22a36d287a59425079a9f7c4676e7351eba
2018-06-07 17:45:46 -07:00
Francois Marier
79f1e9e5a8 Bug 1467581 - Remove the use of default captures in closures. r=gcp
Explicitly specify the arguments to copy to avoid making a copy of
a dangling `this` pointer.

Convert nsUrlClassifierDBService::mClassifier to a RefPtr since
the update closure might need to continue to access its members
after it's been released by the main thread.

MozReview-Commit-ID: CPio3n9MmsK

--HG--
extra : rebase_source : d7a8b207336209ee37441f3429bc608140e404ae
2018-06-07 17:22:32 -07:00
Francois Marier
e0fce2a920 Bug 1434206 - Keep LookupResult objects in smart pointers. r=gcp
Replace raw pointers to LookupResult with RefPtrs and eplace the
nsAutoPtr objects + raw pointers params with UniquePtrs.

Also remove unnecessarily paranoid OOM checks when creating single
LookupResult objects since those are pretty small.

MozReview-Commit-ID: G85RNnAat6H

--HG--
extra : rebase_source : a8f6a1ff1e24663d428c8d894cb624e1c67e1bd3
2018-06-05 13:15:03 -07:00
Francois Marier
e8e020d2af Bug 1434206 - Clarify when the lookupcache arrays should be cleared. r=gcp
MozReview-Commit-ID: 7smtnCC0MGT

--HG--
extra : rebase_source : 6288f543abc837cc8084de69f75ab30b7ce642db
2018-05-21 15:58:12 -07:00
Francois Marier
5a2649faf7 Bug 1434206 - Make LookupCache objects const as much as possible. r=gcp
MozReview-Commit-ID: AqC6NUh6ifm

--HG--
extra : rebase_source : a125989490e7988021215f47d17d3cb3b0303651
2018-05-21 15:11:01 -07:00
Francois Marier
8f19e9f805 Bug 1434206 - Keep LookupCache objects in smart pointers. r=gcp
The existing mix of UniquePtr and raw pointers is confusing when
trying to figure out the exact lifetime of these objects.

MozReview-Commit-ID: Br4S7BXEFKs

--HG--
extra : rebase_source : ba35d5c2eeda0741eb4c5491a6caf03f20f3d0ce
2018-05-16 19:13:48 -07:00
Francois Marier
84e344038a Bug 1434206 - Replace a pointer with a reference. r=gcp
This will prevent our holding on to this pointer incorrectly in the
future.

MozReview-Commit-ID: H8ueIOK1qAK

--HG--
extra : rebase_source : 937e9c702c5109b6dfc1684392a1204d8a1edc49
2018-05-15 17:18:18 -07:00
Francois Marier
8b98277f9f Bug 1434206 - Make TableUpdate objects const as much as possible. r=gcp
I tried to make TableUpdateArray point to const TableUpdate objects
everywhere but there were two problems:

- HashStore::ApplyUpdate() triggers a few Merge() calls which include
  sorting the underlying TableUpdate object first.

- LookupCacheV4::ApplyUpdate() calls TableUpdateV4::NewChecksum() when the
  checksum is missing and that sets mChecksum.

MozReview-Commit-ID: LIhJcoxo7e7

--HG--
extra : rebase_source : f6ca4bf42d1ddb897a974a0b19c7185b0b6b93af
2018-05-11 16:02:37 -07:00
Francois Marier
214074e8d4 Bug 1434206 - Keep TableUpdate objects in smart pointers. r=gcp
Manually keeping tabs on the lifetime of these objects is a pain
and is the likely source of some of our crashes. I suspect we might
also be leaking memory.

This change creates an explicit copy of the main array into the
update thread to avoid using a non-thread-safe shared data
structure. This is a shallow copy. Only the pointers to the
TableUpdates are copied, which means one pointer per list (e.g. 5
in total for google4 in a new profile).

MozReview-Commit-ID: 221d6GkKt0M

--HG--
extra : rebase_source : e1b81f11bb9b41e465571a95845079f455b5868e
2018-06-01 15:48:48 -07:00
Francois Marier
a13da01475 Bug 1434206 - Assert that gethash processing happens on the right thread. r=gcp
MozReview-Commit-ID: FbF8LzCZ3XO

--HG--
extra : rebase_source : 097b1c519ddb162bce877f76b3b37eb7e80d0ac7
2018-05-11 11:47:26 -07:00
Francois Marier
d16c2f1d5c Bug 1434206 - Use a TableUpdateV2 param in ApplyUpdate(). r=gcp
HashStore::ApplyUpdate() is a V2-only function and so we can be
explicit about that and remove unnecessary casts.

Add a new update error code for when we fail to cast a TableUpdate
object to the expected protocol version.

MozReview-Commit-ID: 65BBwiZJw6J

--HG--
extra : rebase_source : 3f4bb0f7594d4015e2614ef747526ec5e8168a08
2018-05-10 16:06:49 -07:00
Francois Marier
30207d91aa Bug 1434206 - Add const to members and functions that can take it. r=gcp
MozReview-Commit-ID: B2aaQTttPAV

--HG--
extra : rebase_source : bbd8d9c734660a4380922ed9b76f1af1de427f3f
2018-05-16 15:26:14 -07:00
Kris Maglione
6b12d08f7d Bug 1462937: Update callers to use nsIFile::GetDirectoryEntries as a nsIDirectoryEnumerator. r=froydnj
MozReview-Commit-ID: Iv4T1MVAF5

--HG--
extra : rebase_source : 1c518883d082884db7f9323a5acc20361228c26b
extra : histedit_source : 70a73c23d1199d3bfbb5379c78930401166c094b
2018-05-19 20:17:45 -07:00
Sebastian Hengst
0819f35e51 Backed out 4 changesets (bug 525063) on request from Andi. a=backout
Backed out changeset 516c4fb1e4b8 (bug 525063)
Backed out changeset 6ff8aaef2866 (bug 525063)
Backed out changeset bf13e4103150 (bug 525063)
Backed out changeset d7d2f08e051c (bug 525063)
2018-04-13 16:01:28 +03:00
Tristan Bourvon
a3a77c0312 Bug 525063 - Initialize uninitialized class attributes in m-c. r=ehsan 2018-04-10 21:11:02 +02:00
Francois Marier
7d4feeefa4 Bug 1442486 - Mark LookupCacheV4 as primed after creating it. r=gcp
RegenActiveTables() relies on mPrimed being set correctly and so
the V4 lookup cache should behave the same way as the V2 one.

The V2 lookup cache on the other hand was unnecessarily setting
mPrimed to true twice.

MozReview-Commit-ID: LwNdI9DTqZ7

--HG--
extra : rebase_source : ff7d7a051f28867be5c35c1079407bb2bfd3a490
2018-03-01 18:09:58 -08:00
Dorel Luca
6ad641c5c4 Merge mozilla-inboud to mozilla-central. a=merge 2018-02-22 11:59:54 +02:00